Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27

    [c] indicare termini di un array in un if

    Salve ragazzi ho fatto un programma per le interrogazioni programmate a scuola... inizialmente l'avevo fatto con tutte variabili ma era troppo lungo oggi ho deciso di rifarlo ma con gli array vi dò la parte di codice e vi chiedo di verificare se quel numero c'è già o no...

    codice:
    int main() {
        int A[17];
        int i;
        srand(time(0));
        for(i=0;i<=16;i++) {
            A[i] = rand() % 17 + 1;
            funzione(A[i]); // fa riferimento a un'altra funzione... non l'ho scritta ma non è importante
            if (A[i] == ???) {
                i--;
            }
        }
        getch();
        return 0;
    }
    Devo dire che se quel valore del array è uguale a un altro dell' array allora i-- ... ma come faccio a dirlo?

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Ti consiglio una funzione (per chiarezza del codice) dove tu gli passi l'elemento estratto e la i. All'interno della funzione un ciclo for che va da 0 ad i dove confronti gli elementi già inseriti nell'array con questo tuo nuovo. La funzione ti ritorna 1 se lo trova già e 0 se non ne trova uno. A questo punto fai nell'if:

    codice:
    if(nome_funzione(a[i], i) == 1)
    {
        i--;
    } else
    {
       //codice
    }
    Credo di esser stato abbastanza chiaro :P

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    codice:
      int j;
      for(j = 0; j < i; j++) 
      if(a[i] == a[j]) {
        i--;
        break;
      }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Grazie mille che mi avete risposto... ho circa risolto... ho voluto fare un ciclo perchè gli altri conisgli che mi avete dato con li ho capiti...ma ho riscontrato un problema...
    Vi mostro:

    codice:
    int main() {
        int A[17];
        int i,j;
        int sino = 0;
        srand(time(0));
        for(i=0;i<=17;i++) {
            A[i] = rand() % 17 + 1;
            for (j=0;j<=i;j++) {
                getch();
                if (A[i] == A[j]) {
                    break;
                }
                else if(j==i) {
                    sino = 1;
                }
                else{
                    continue;
                }
            }
            if(sino == 1) {
                funzione(A[i]);
                sino= 0;
            }
            else {
                i--;
            }
        }
        getch();
        return 0;
    }
    Vi spiego... Ho fatto un ciclo con la variabile j per controllare se quel numero era già presente... se c'è già A[i] == A[j] Allora ferma il ciclo e riprova con un'altro numero.
    Se j=i quindi il controllo è giunto alla fine e non ha trovato nessuna corrispondenza allora sino = 1 e quindi dopo andiamo a stampare il numero altrimenti se A[j] != A[i] riprova con un altro valore di j.... il problema è che non mi fa vedere niente a video D: ... dove sbaglio? D:

    Ho provato quindi anche a mettere dei printf con un getch() per capire cosa fa il prgramma... potete guardare anche voi con succede ... il programma entra sempre nel primo caso del for...

    codice:
    int main() {
        int A[17];
        int i,j;
        int sino = 0;
        srand(time(0));
        for(i=0;i<=17;i++) {
            A[i] = rand() % 17 + 1;
            printf("A[i] = %d\n", A[i]);
            for (j=0;j<=i;j++) {
                printf("j= %d\n", j);
                getch();
                if (A[i] == A[j]) {
                    printf("A[i](%d) == A[j](%d)\n", A[i],A[j]);
                    break;
                }
                else if(j==i) {
                    printf("j==i\n");
                    sino = 1;
                }
                else{
                    printf("Altro\n");
                    continue;
                }
            }
            if(sino == 1) {
                funzione(A[i]);
                sino= 0;
            }
            else {
                i--;
            }
        }
        getch();
        return 0;
    }
    Ultima modifica di wasd28; 17-11-2013 a 19:22

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void funzione(int);
    
    int main() {
        int A[17];
        int i,j;
        srand(time(0));
        for(i=0;i<17;i++) {
            A[i] = rand() % 17 + 1;
            for (j=0;j<i;j++) {
                if (A[i] == A[j]) {
                    i--;
                    break;
                }
            }
        }
        for(i = 0; i < 17; i++)
            funzione(A[i]);
        return 0;
    }
    
    void funzione(int a) {
        printf("funzione: %d\n", a);
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Se vuoi essere più ordinato ed evitare il secondo ciclo...
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <stdbool.h>
    
    void funzione(int);
    bool check(int v, int *a, int l);
    
    int main() {
        int A[17];
        int i;
        srand(time(0));
        for(i=0;i<17;i++) {
            A[i] = rand() % 17 + 1;
            if(check(A[i], A, i)) {
                i--;
                continue;
            }
            funzione(A[i]);
        }
        return 0;
    }
    
    void funzione(int a) {
        printf("funzione: %d\n", a);
    }
    
    bool check(int v, int *a, int l) {
        int i;
        for (i=0;i<l;i++)
                if (v == a[i])
                    return true;
        return false;
    }
    In alternativa puoi anche usare un goto, ma dato che hai già problemi con queste strutture te lo sconsiglio vivamente.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Grazie mille )

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Non c'è di che, ma vedi di capire bene come funzionano e se non capisci chiedi
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.