ciuaz!!!
02-02-2008, 16:24
#include <iostream>
#include <fstream>
using namespace std;
void F(int *X, int &q, int &w, int &e)
{
ifstream IN("input");
ofstream OUT ("output");
if(!IN || ! OUT)
throw (0);
int cont=0;
for (int i=0; (i<80) && (!IN.eof()); i++){
IN>>X[i];
cont++;
}
if (IN.eof()) cont--;
q=cont/20; //numero di torte (ciascuna contiene 20 elementi
w=(cont%20)/5; //numero di righe (ogni riga contiene 5 elementi)
e=((cont%20)%5); // numero di elementi rimanenti
IN.close();
}
int main()
{
try {
ifstream IN ("input");
ofstream OUT("output");
int A[4][4][5];
int indice1=0,indice2=0,indice3=0;
int *p= &A[0][0][0];
int numeroelementi;
F(**A, indice1, indice2, indice3);
OUT << indice1 << ' ' << indice2 << ' ' << indice3 << ' ';
numeroelementi= indice1*20 + indice2*5 + indice3;
for (int i=0; i<numeroelementi; i++)
OUT<<*(p+i)<<' ';
IN.close();
OUT.close();
}
catch(int x) {cout<<"problemi con i file"<<x<<endl;}
}
Sto impazzendo. Questo programmetto per l'università prende da un file input una sequenza di interi con uno spazio che li divide e uno spazio alla fine della sequenza (per esempio 1 2 3 4 5 6 7 8 9 0 ). Poi mette in output 3 indici che fanno capire come è stato riempito l'array a 3 dimensioni, e in seguito stampa gli elementi dell'array che sono stati messi in input.
Il problema è che a volte mi dà in output strani caratteri indecifrabili (questi ′‰‰‱′″‴‵‶‷‸‹‰‱′″‴‵‶‷‸‹‰), faccio girare nuovamente il programma e in output mi dà sempre la stessa sequenza 4 0 0 2089314996 2089305984 [...] (ovviamente sballata e totalmente indipendente da quello che scrivo in input).
Devo quindi cancellare il file input e farne un altro, il programma funziona di nuovo per alcune sequenze (tipo 7 8 54 43 6 6 7 3 ) ma non funziona con 40 elementi, 39 elementi, 80 elementi... mentre con 20 elementi funziona (1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ).
Non riesco proprio a capire perchè, faccio "a mano" le operazioni e non vedo errori.
Vi prego una mano, prima che spacchi tutto...:asd: (è rimasta integra ancora la tastiera e il monitor).
#include <fstream>
using namespace std;
void F(int *X, int &q, int &w, int &e)
{
ifstream IN("input");
ofstream OUT ("output");
if(!IN || ! OUT)
throw (0);
int cont=0;
for (int i=0; (i<80) && (!IN.eof()); i++){
IN>>X[i];
cont++;
}
if (IN.eof()) cont--;
q=cont/20; //numero di torte (ciascuna contiene 20 elementi
w=(cont%20)/5; //numero di righe (ogni riga contiene 5 elementi)
e=((cont%20)%5); // numero di elementi rimanenti
IN.close();
}
int main()
{
try {
ifstream IN ("input");
ofstream OUT("output");
int A[4][4][5];
int indice1=0,indice2=0,indice3=0;
int *p= &A[0][0][0];
int numeroelementi;
F(**A, indice1, indice2, indice3);
OUT << indice1 << ' ' << indice2 << ' ' << indice3 << ' ';
numeroelementi= indice1*20 + indice2*5 + indice3;
for (int i=0; i<numeroelementi; i++)
OUT<<*(p+i)<<' ';
IN.close();
OUT.close();
}
catch(int x) {cout<<"problemi con i file"<<x<<endl;}
}
Sto impazzendo. Questo programmetto per l'università prende da un file input una sequenza di interi con uno spazio che li divide e uno spazio alla fine della sequenza (per esempio 1 2 3 4 5 6 7 8 9 0 ). Poi mette in output 3 indici che fanno capire come è stato riempito l'array a 3 dimensioni, e in seguito stampa gli elementi dell'array che sono stati messi in input.
Il problema è che a volte mi dà in output strani caratteri indecifrabili (questi ′‰‰‱′″‴‵‶‷‸‹‰‱′″‴‵‶‷‸‹‰), faccio girare nuovamente il programma e in output mi dà sempre la stessa sequenza 4 0 0 2089314996 2089305984 [...] (ovviamente sballata e totalmente indipendente da quello che scrivo in input).
Devo quindi cancellare il file input e farne un altro, il programma funziona di nuovo per alcune sequenze (tipo 7 8 54 43 6 6 7 3 ) ma non funziona con 40 elementi, 39 elementi, 80 elementi... mentre con 20 elementi funziona (1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ).
Non riesco proprio a capire perchè, faccio "a mano" le operazioni e non vedo errori.
Vi prego una mano, prima che spacchi tutto...:asd: (è rimasta integra ancora la tastiera e il monitor).