[C] Conferma svolgimento codice parità
Ciao a tutti!
Sono sempre alle prese con i miei esercizi in C, e vorrei chiedervi una conferma su questo esercizio
Si sviluppi un programma in linguaggio C che riceva in ingresso una sequenza di al più 1000 cifre binarie (1 o 0) terminate dal carattere /. Tale sequenza dovrà essere fornita in ingresso ad una funzione che dovrà fornire il numero delle cifre pari a 0 e il risultato della computazione del codice di parità dispari su tale sequenza (1 per codice corretto, 0 per codice errato). (10 punti)
Ad esempio, se in ingresso al programma viene fornita la sequenza:
10111111111111110000000000000000111111111111111111000000011/
la funzione deve computare 24 per il numero degli zeri, e 1 come risultato del controllo di parità dispari.
Ecco il codice che ho scritto:
Secondo voi è giusto il programma? Quando mi viene chiesto di controllare il codice di parità dispari, io devo controllare che se il numero di 1 è dispari, allora il codice è giusto e deve ritornare 1, altrimenti se è pari allora è sbagliato e deve ritornare 0.
Grazie mille
Ciaoo
Sono sempre alle prese con i miei esercizi in C, e vorrei chiedervi una conferma su questo esercizio

Si sviluppi un programma in linguaggio C che riceva in ingresso una sequenza di al più 1000 cifre binarie (1 o 0) terminate dal carattere /. Tale sequenza dovrà essere fornita in ingresso ad una funzione che dovrà fornire il numero delle cifre pari a 0 e il risultato della computazione del codice di parità dispari su tale sequenza (1 per codice corretto, 0 per codice errato). (10 punti)
Ad esempio, se in ingresso al programma viene fornita la sequenza:
10111111111111110000000000000000111111111111111111000000011/
la funzione deve computare 24 per il numero degli zeri, e 1 come risultato del controllo di parità dispari.
Ecco il codice che ho scritto:
#include <stdio.h> #define dim 1000 int totzeri (char codice[], int tot, int zeri); int main () { int i=0, tot=0, zeri; char codice[dim], c; while ((c=getchar()) != '/') { codice[i++]=c; tot++; } printf("Risultato computazione: %d\n", totzeri(codice, tot, zeri)); return 0; } int totzeri (char codice[], int tot, int zeri) { int i, zero=0, disp=0; for (i=0;i<tot;i++) { if (codice[i]%2==0) zero++; else (disp++); } printf("\n\nTotale zeri inseriti: %d\n", zero); if (disp%2!=0) return 1; else { return 0; } }
Secondo voi è giusto il programma? Quando mi viene chiesto di controllare il codice di parità dispari, io devo controllare che se il numero di 1 è dispari, allora il codice è giusto e deve ritornare 1, altrimenti se è pari allora è sbagliato e deve ritornare 0.
Grazie mille
Ciaoo

Risposte
Quello che hai scritto non conta il numero degli zero ma il numero dei caratteri inseriti dal codice ASCII pari (il codice ASCII di 0 è 48) e allo stesso modo controlla che i numeri dal codice ASCII dispari siano in numero dispari.
Poi hai inserito 2 variabili identiche (i, tot) di cui una non serve a niente visto che fanno la stessa cosa.
Il parametro "zeri" non viene usato dal MAIN nè dalla funzione quindi per come l'hai scritta andrebbe tolto, anche se in realtà per fare correttamente l'esercizio quel parametro è necessario e va usato. L'esercizio non dice di visualizzare il risultato all'interno della funzione ma di RESTITUIRLO (al MAIN che avrà il compito di visualizzarlo).
E poi dovresti controllare che la stringa inserita sia composta solamente da 0 ed 1.
guarda qui/ Totale zeri inseriti: 3 Risultato computazione: 1 Process returned 0 (0x0) execution time : 4.844 s Press any key to continue.
Poi hai inserito 2 variabili identiche (i, tot) di cui una non serve a niente visto che fanno la stessa cosa.
Il parametro "zeri" non viene usato dal MAIN nè dalla funzione quindi per come l'hai scritta andrebbe tolto, anche se in realtà per fare correttamente l'esercizio quel parametro è necessario e va usato. L'esercizio non dice di visualizzare il risultato all'interno della funzione ma di RESTITUIRLO (al MAIN che avrà il compito di visualizzarlo).
E poi dovresti controllare che la stringa inserita sia composta solamente da 0 ed 1.
#include <stdio.h> #include <string.h> #define dim 1000 int codice_parita(char codice[], int *zeri); int main () { int i=0, zeri=0; char codice[dim]; scanf("%[^//]", codice); for (i=0; i<strlen(codice); i++) { if (codice[i]!='0' && codice[i]!='1') { printf("Il codice inserito non e' corretto \n"); return 0; } } printf("Risultato computazione: %d\n", codice_parita(codice, &zeri)); printf("Il numero degli zero e' %d\n", zeri); return 0; } int codice_parita(char codice[], int *zeri) { int i, disp=0; for (i=0;i<strlen(codice);i++) { if (codice[i]=='0') *zeri+=1; else disp++; } if (disp%2!=0) return 1; else return 0; }
Ciao Atem!
Grazie mille, mi ero accorto anche io del problem ed avevo riscritto il codice
Grazie
Grazie mille, mi ero accorto anche io del problem ed avevo riscritto il codice
#include <stdio.h> #define DIM 1000 int totzeri(const char *, int *); int main () { int par, nzeri; int c; size_t i = 0; char codice[DIM+1]; printf("Inserisci il codice binario, per terminare digita /:\n\t"); while ((c = getchar()) != '/' ) codice[i++] = c; codice[i] = '\0'; par = totzeri(codice, &nzeri); printf("Numero di zeri: %d\nRisultato computazione: %d", nzeri, par); return 0; } int totzeri(const char *codice, int *nzeri) { int nuni = 0; *nzeri = 0; for ( ; *codice; ++codice) if (*codice == '0') ++(*nzeri); else ++nuni; return (nuni%2 == 0) ? 0 : 1; }
Grazie
