Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - aiuto programmi c
Forum - C/C++ - aiuto programmi c

Avatar
ale23 (Normal User)
Newbie


Messaggi: 2
Iscritto: 20/09/2009

Segnala al moderatore
Postato alle 21:08
Domenica, 20/09/2009
ciao a tutti..richiedo il vostro aiuto per un esame. ho provato a risolvere gli esercizi ma non capisco dove ho sbagliato.. qualcuno può aiutarmi? grazie


ale23 ha allegato un file: esame.zip (244011 bytes)
Clicca qui per scaricare il file
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:16
Domenica, 20/09/2009
Ma perche' non descrivi il problema o il malfunzionamento?

Ultima modifica effettuata da theprogrammer il 20/09/2009 alle 21:18
PM Quote
Avatar
gio97 (Ex-Member)
Guru


Messaggi: 715
Iscritto: 25/04/2009

Segnala al moderatore
Postato alle 21:56
Domenica, 20/09/2009
Ci sono diversi errori, per primi due ho notato che in prova1.c non c'è la main(ho letto l'esercizio, ma non sarebbe meglio, anche se non richiesto fare un debug, come nel file prova2.c?), e in prova2.c c'è una chiamata a una funzione void, viene assegnato a una variabile l'ipotetico dato restituito (che non esiste essendo una funzione void). Inoltre hai scritto una funzione ConvertiNumeri, che non è necessaria, esiste infatti la funzione standard atoi, ma questo non è un problema. Poi c'è la funzione strcpy utilizzata senza stringhe, file.txt deve essere dentro virgolette...
Penso che se continuassi a controllare potrei continuare anche a trovare problemi, ma comunque non ho neanche provato a compilare, quindi gli errori gli ho visti dando un'occhiata veloce, compila, leggi le righe di errore, e chiedi se non sai che errore sia presente. :k:

Ultima modifica effettuata da gio97 il 20/09/2009 alle 21:56
PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 22:01
Domenica, 20/09/2009
Dovresti postare il codice per intero, nell'es 1 hai postato solo una funzione.
Comunque in essa usi la funzione fscanf in modo scorretto.
Essa richiede l'indirizzo della variabile in cui deve salvare i dati, quindi se vuoi che scriva nell'array 'mat' in posizione 'i,j' devi scrivere:
Codice sorgente - presumibilmente Plain Text

  1. fscanf(fp,"%c",&mat[i][j]);
  2. //fscanf(fp,"%c",mat[i][j]); questo è sbagliato



Per quanto riguarda invece l'es2 non saprei da che parte iniziare...
1) Studiati come si passano gli argomenti alle funzioni perchè hai fatto un macello...
2) Studiati come funzioni in generale perchè non puoi certo assegnare ad un array di char il valore di una funzione di tipo void... E sopratutto se vuoi passare un array ad una funzione non si fa come hai fatto tu... devi usare i puntatori...
3) non è neanche il caso di elencare tutti gli altri errori, ti conviene ripassare un po le basi del C...

EDIT: chiedo scusa se ho ripetuto alcune cose dette da gio97 ma abbiamo scritto i nostri post contemporaneamente...

Ultima modifica effettuata da Matthew il 20/09/2009 alle 22:02
PM Quote
Avatar
ale23 (Normal User)
Newbie


Messaggi: 2
Iscritto: 20/09/2009

Segnala al moderatore
Postato alle 15:32
Lunedì, 21/09/2009
ho provato a rivedere il programma ma non riesco a farlo funzionare..mi dice segmentation fault...quello che il programma deve fare è scritto nel testo allegato.. mi riferisco al secondo e terzo esercizio. grazie


#include<stdio.h>
#include <string.h>

char Funzione (char numero[11] ,char m[5][80]);
int ConvertiNumero (char numero [1], int i);


int main ( char valore [10])
{
char cifra [5][80];

printf("inserisci il valore \n");
scanf("%s", valore);
Funzione (valore, cifra);
printf("%s", Funzione);

}


char Funzione (char numero[11] ,char m[5][80])
{
int i,j, q=0, n;
char num[1], mat[5][8];
char nome[10]="file.txt";


FILE*fp;

for(i=0; numero<strlen(numero); i++)
{

n=ConvertiNumero (numero, i);
  

nome[strlen(nome)-5]='n';
fp=fopen(nome,"r");
for(i=0;i<5;i++)
for(j=0;j<8;j++)
  fscanf(fp,"%c", &mat[j]);
m[5][q]=mat[j];
}
fclose(fp);
return m[5][q];
q+=5;
}


int ConvertiNumero (char num[1], int i)
{
if (num=='0')
return 0;
else if (num=='1')
return 1;
else if (num=='2')
return 2;
else if (num=='3')
return 3;
else if (num=='4')
return 4;
else if (num=='5')
return 5;
else if (num=='6')
return 6;
else if (num=='7')
return 7;
else if (num=='8')
return 8;
else if (num=='9')
return 9;
}




ale23 ha allegato un file: testo.JPG (209136 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
gio97 (Ex-Member)
Guru


Messaggi: 715
Iscritto: 25/04/2009

Segnala al moderatore
Postato alle 15:47
Lunedì, 21/09/2009
Testo quotato

Postato originariamente da ale23:

Codice sorgente - presumibilmente C++

  1. #include<stdio.h>
  2. #include <string.h>
  3.  
  4. char Funzione (char numero[11] ,char m[5][80]);
  5. int ConvertiNumero (char numero [1], int i);
  6.  
  7.  
  8. int main ( char valore [10])
  9. {
  10.  char cifra [5][80];
  11.  
  12.  printf("inserisci il valore \n");
  13.  scanf("%s", valore);
  14.  Funzione (valore, cifra);
  15.  printf("%s", Funzione);
  16.  
  17. }
  18.  
  19.  
  20. char Funzione (char numero[11] ,char m[5][80])
  21. {
  22. int i,j, q=0, n;
  23. char num[1], mat[5][8];
  24. char nome[10]="file.txt";
  25.  
  26.  
  27. FILE*fp;
  28.  
  29. for(i=0; numero[i]<strlen(numero); i++)
  30. {
  31.  
  32. n=ConvertiNumero (numero, i);
  33.  
  34.  
  35. nome[strlen(nome)-5]='n';
  36. fp=fopen(nome,"r");
  37. for(i=0;i<5;i++)
  38.  for(j=0;j<8;j++)
  39.   fscanf(fp,"%c", &mat[i][j]);
  40. m[5][q]=mat[i][j];
  41. }
  42. fclose(fp);
  43. return m[5][q];
  44. q+=5;
  45. }
  46.  
  47.  
  48. int ConvertiNumero (char num[1], int i)
  49. {
  50. if (num[i]=='0')
  51. return 0;
  52. else if (num[i]=='1')
  53. return 1;
  54. else if (num[i]=='2')
  55. return 2;
  56. else if (num[i]=='3')
  57. return 3;
  58. else if (num[i]=='4')
  59. return 4;
  60. else if (num[i]=='5')
  61. return 5;
  62. else if (num[i]=='6')
  63. return 6;
  64. else if (num[i]=='7')
  65. return 7;
  66. else if (num[i]=='8')
  67. return 8;
  68. else if (num[i]=='9')
  69. return 9;
  70. }



Nella main usa argc e argv, che quel vettore di char che hai scritto non ha senso, inoltre se già il valore è stato passato non serve che ci sia scanf per farlo reinserire, poi il passaggio dei vettori alle funzioni è errato, si usano i puntatori, altrimenti passi il valore che ha quell'indice nell'array.

Ultima modifica effettuata da gio97 il 21/09/2009 alle 15:48
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 15:53
Lunedì, 21/09/2009
In realta' il programma e' da rivedere fortemente. Se non sai farlo, molto probabilmente (come ti e' stato gia' detto) devi rivedere tutte le nozioni di base del linguaggio.

Ovviamente, scrivere il programma per te, non ti aiuterebbe.

PM Quote