Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Programma in C... Perchè non termina??

    Vi premetto che non ne capisco di C... La mia ragazza sta facendo un'esame di informatica e mi ha chiesto di scrivere un programma ed io ho improvvisato... Si tratta di un programma con una libreria che esegue operazioni su array di numeri (riempimento, ordinamento, ricerca, massimo, minimo, aggiunta ed eliminazione di elementi)...
    Programma:
    codice:
    #include<stdio.h>
    void inizia(int ordinato, int creato, int lung);
    void menu(int ordinato, int creato, int lung, int vettore[]);
    void esci();
    #include<vettori.h>
    void esegui(int operazione, int ordinato, int creato, int lung, int vettore[]);
    
    
    main()
    {
    int lung, creato=0, ordinato=0;
    printf("Inserisci numero elementi: ");
    scanf("%d",&lung);
    printf("\n");
    if (lung != 0) inizia(ordinato, creato, lung);
    else {
    printf("Non hai inserito un valore valido\n");
    esci();
    }
    }
    
    
    void inizia(int ordinato, int creato, int lung)
    {
    int vettore[lung];
    menu(ordinato, creato, lung, vettore);
    }
    
    
    void menu(int ordinato, int creato, int lung, int vettore[])
    {
    int operazione;
    printf("MENU\n");
    if (!creato) printf("1. Crea vettore\n");
    else
    {
    if (!ordinato) printf("2. Ordina vettore\n");
    printf("3. Ricerca\n4. Calcola massimo e minimo\n5. Stampa\n6. Aggiungi elemento\n7. Elimina elemento\n");
    }
    printf("8. Termina programma\nScegli operazione da effettuare: ");
    scanf("%d",&operazione);
    esegui(operazione, ordinato, creato, lung, vettore);
    }
    
    
    void esci()
    {
    printf("\nEsecuzione terminata\n\n");
    }
    
    
    void esegui(int operazione, int ordinato, int creato, int lung, int vettore[])
    {
    if (operazione==1 && !creato) crea(ordinato, creato, lung, vettore);
    else if (operazione==2 && !ordinato && creato) ordina(ordinato, creato, lung, vettore);
    else if (operazione==3 && creato) ricerca(ordinato, creato, lung, vettore);
    else if (operazione==4 && creato) massimo_minimo(ordinato, creato, lung, vettore);
    else if (operazione==5 && creato) stampa(ordinato, creato, lung, vettore);
    else if (operazione==6 && creato) aggiungi(ordinato, creato, lung, vettore);
    else if (operazione==7 && creato) elimina(ordinato, creato, lung, vettore);
    else if (operazione==8) esci();
    else
    {
    printf("Errore nella selezione!\n\n");
    menu(ordinato, creato, lung, vettore);
    }
    }
    Libreria:
    codice:
    #include<stdio.h>
    
    void crea(int ordinato, int creato, int lung, int vettore[])
    {
    int i;
    printf("\n");
    for (i=0;i<lung;i++)
    {
    printf("Inserisci elemento %d: ",i);
    scanf("%d",&vettore[i]);
    }
    creato = 1;
    printf("\nIl vettore è stato creato\n\n");
    menu(ordinato, creato, lung, vettore);
    }
    
    
    void stampa(int ordinato, int creato, int lung, int vettore[])
    {
    int i;
    printf("\nStampa del vettore:\n");
    for (i=0;i<lung;i++)
    printf("%d = %d\n",i,vettore[i]);
    printf("\n");
    menu(ordinato, creato, lung, vettore);
    }
    
    
    void ricerca(int ordinato, int creato, int lung, int vettore[])
    {
    int i, elemento, volte=0;
    printf("\nElemento da cercare:");
    scanf("%d",&elemento);
    if (ordinato)
    {
    for (i=0;i<lung && vettore[i] <= elemento;i++)
    {
    if (elemento == vettore[i])
    {
    printf("Elemento trovato in posizione %d\n",i);
    volte++;
    }
    }
    if (volte == 0) printf("Elemento non trovato\n\n");
    else if (volte == 1) printf("Elemento trovato 1 volta\n\n");
    else printf("Elemento trovato %d volte\n\n",volte);
    menu(ordinato, creato, lung, vettore);
    }
    if (!ordinato)
    {
    for (i=0;i<lung;i++)
    {
    if (elemento == vettore[i])
    {
    printf("Elemento trovato in posizione %d\n",i);
    volte++;
    }
    }
    if (volte == 0) printf("Elemento non trovato\n\n");
    else if (volte == 1) printf("Elemento trovato 1 volta\n\n");
    else printf("Elemento trovato %d volte\n\n",volte);
    }
    menu(ordinato, creato, lung, vettore);
    }
    
    
    void ordina(int ordinato, int creato, int lung, int vettore[])
    {
    int i, j, temp;
    for(i=0;i<lung;i++)
    for(j=i+1;j<lung;j++)
    if (vettore[j] < vettore[i])
    {
    temp = vettore[i];
    vettore[i] = vettore[j];
    vettore[j]= temp;
    }
    printf("\nIl vettore è stato ordinato\n\n");
    ordinato = 1;
    menu(ordinato, creato, lung, vettore);
    }
    
    
    void aggiungi(int ordinato, int creato, int lung, int vettore[])
    {
    printf("\nInserisci elemento da aggiungere: ");
    scanf("%d",&vettore[lung]);
    printf("Elemento aggiunto in posizione %d\n\n",lung);
    ordinato = 0;
    lung++;
    menu(ordinato, creato, lung, vettore);
    }
    
    
    void massimo_minimo(int ordinato, int creato, int lung, int vettore[])
    {
    int i, massimo, minimo;
    if(ordinato)
    {
    minimo = vettore[0];
    massimo = vettore[lung-1];
    }
    else
    {
    minimo = vettore[0];
    massimo = vettore[0];
    for(i=1;i<lung;i++)
    {
    if (vettore[i]<minimo) minimo = vettore[i];
    if (vettore[i]>massimo) massimo = vettore[i];
    }
    }
    printf("\nElemento minimo: %d\nElemento massimo: %d\n\n",minimo,massimo);
    menu(ordinato, creato, lung, vettore);
    }
    
    
    void elimina(int ordinato, int creato, int lung, int vettore[])
    {
    int j, elemento, i=0, volte=0;
    printf("\nInserisci elemento da eliminare: ");
    scanf("%d",&elemento);
    do
    {
    if(elemento==vettore[i])
    {
    volte++;
    if(i!=lung-1) for(j=i;j<lung;j++) vettore[j] = vettore[j+1];
    lung--;
    }
    else i++;
    }
    while (i<lung);
    if(volte==0) printf("Elemento non trovato nel vettore\n\n");
    else if(volte==1) printf("Elemento eliminato 1 volta\n\n");
    else printf("Elemento eliminato %d volte\n\n",volte);
    if (lung!=0) menu(ordinato, creato, lung, vettore);
    else printf("Il vettore è vuoto. Il programma sarà terminato\n\n");
    }
    Funziona tutto bene... Unico problema: quando si effettuano molte operazioni e poi si sceglie di terminare il programma [esci()] ricompare il menu e bisogna scegliere una seconda volta l'opzione per farlo terminare... PERCHE'???
    Grazie a chi risponderà...

  2. #2
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Prova a sostituire
    codice:
    void esci()
    {
    printf("\nEsecuzione terminata\n\n");
    }
    aggiungendo la funzione exit()

    codice:
    void esci()
    {
    printf("\nEsecuzione terminata\n\n");
    exit(0);
    }
    Ciao

  3. #3
    Grazie tante della risposta...
    Cmq non posso inserire quella funzione perchè non l'hanno ancora spiegata (sai come vanno ste cose)...

    Ma ho risolto e ho trovato l'errore:
    era nella funzione ricerca() ora funziona tutto ok...

    Grazie lo stesso a tutti...
    Byez

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.