Problema conversione loop for in loop while

di Anonimizzato31451 il
12 risposte
Salve a tutti, sono appena arrivato nel mondo della programmazione in C, convertendo il seguente programma con loop for: [CODE] #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define N 6 #define M 7 #define D 6 //ci possono essere massimo 6 elementi in comune tra i due insiemi di stringhe #define LENW 20 int TrovaElementiUguali(char V1[N][LENW],char V2[M][LENW],char V3[N][LENW]); int main() { char V1[N][LENW]; char V2[M][LENW]; char V3[D][LENW]; //vettore di stringhe in cui andare a inserire gli elementi presenti sia in V1 che in V2 int i; for (i=0;i<N;i++){ printf("inserisci la %d-esima stringa nel primo insieme: ",i); scanf("%s",V1[i]); } printf("\n"); for (i=0;i<M;i++){ printf("inserisci la %d-esima stringa nel secondo insieme: ",i); scanf("%s",V2[i]); } int dim; dim = TrovaElementiUguali(V1,V2,V3); printf("Gli elementi comuni ai due insiemi sono: "); for (i=0;i<dim;i++){ printf("%s ",V3[i]); } return 0; } int TrovaElementiUguali(char V1[N][LENW],char V2[M][LENW],char V3[N][LENW]){ int i,j,cont; cont = 0; for (i=0;i<N;i++){ for (j=0;j<M;j++){ if (strcmp(V1[i],V2[j])==0){ (strcpy(V3[cont],V1[i])); cont++; } } } return cont; },
in loop while: [CODE] #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define N 6 #define M 7 #define D 6 //ci possono essere massimo 6 elementi in comune tra i due insiemi di stringhe #define LENW 20 int TrovaElementiUguali(char V1[N][LENW],char V2[M][LENW],char V3[N][LENW]); int main() { char V1[N][LENW]; char V2[M][LENW]; char V3[D][LENW]; //vettore di stringhe in cui andare a inserire gli elementi presenti sia in V1 che in V2 int i; i=0; while (i<N) { printf("inserisci la %d-esima stringa nel primo insieme: ",i); scanf("%s",V1[i]); i++; } printf("\n"); while (i<M){ printf("inserisci la %d-esima stringa nel secondo insieme: ",i); scanf("%s",V2[i]); i++; } int dim; while(i<dim){ dim=TrovaElementiUguali(V1,V2,V3); printf("Gli elementi comuni ai due insiemi sono: "); printf("%s",V3[i]); i++; } return 0; } int TrovaElementiUguali(char V1[N][LENW],char V2[M][LENW],char V3[N][LENW]){ int i=0, cont; while (i<N){ int j=0, cont; while (j<M){ if (strcmp(V1[i],V2[j])==0){ (strcpy(V3[cont],V1[i])); cont++; i++; j++; } } } return cont; } Il programma non funziona come dovrebbe, non ci sono errori di sintassi, ma il programma non funziona come dovrebbe a differenza della versione con loop for.

Potreste sistemarmi il codice della versione con loop while per far in modo che funzioni alla perfezione? Grazie infinite in anticipo!

12 Risposte

  • Non dici che difetto riscontri, ma penso che sia dovuto che tra i vari while non azzeri il contatore 'i'.
    Nel primo while 'i' vale 0, ma quando il ciclo finisce, vale 6. Quindi il while successivo inizia con 'i' che vale 6...
  • Oltre al fatto che all'inizio dell'ultimo ciclo la dim non ha un valore preciso
  • L'errore che riscontro nella versione con loop while è "command not found".

    Sareste così gentile da sistemare il codice, correggendo l'errore, per favore?
  • Il ciclo su i deve finire con l'incremento di i e lo stesso vale per il ciclo j.

    Per il comando non trovato non lo so. Te lo da a runtime? Hai usato roba tipo system("pause") su piattaforma non Windows?
  • Scondo me deve ritornare un counter degli elementi in comune, altrimenti va a stampare anche elementi non inizializzati, quindi devo fare while(i < counter)?
  • Non ho detto di cambiare la condizione. I contatori i e j devono essere aumentati alla fine dei rispettivi cicli, come avviene in automatico nel for.
  • Scusa Gyro ma conosci la differenza tra i due cicli? Sai cosa fa la for nelle sue varie parti e come si fanno quelle varie parti nella while? Se nella for c'è un i++ anche nella while ci deve essere, non sei d'accordo?
  • Il ciclo for permette di eseguire un interazione per ogni elemento di un iterabile; il ciclo while itera sino a quando una condizione è vera.
  • Anche il for gira su condizione, non c'entra l'array. Tant'è che nelle tonde hai messo, tra le altre cose, una condizione. La "i++" del for viene eseguita alla fine di ogni iterazione e così deve essere anche nel while, perché siano equivalenti.
  • Risolto, potete chiudere.
  • Hai risolto ma hai compreso quello che ti ho scritto?
Devi accedere o registrarti per scrivere nel forum
12 risposte