Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    13

    [C] Trovare il valore massimo in un array

    Per un esercizio analogo mi sono imbattuto a dover confrontarmi con un problema simile.
    Devo trovare il massimo di un array, un argomento sciocco tuttavia, trovo delle difficolta'.

    Ho iniziato innanzitutto a scrivere l'algoritmo, per poi cercare di passarlo in C, sia per esercitazione sia per aver conferma che l'algoritmo funzioni.
    codice:
    function massimo_dell_array (a,n)
    var i: INTEGER
    var massimo: INTEGER
        begin
            i:=1
            massimo:=a[i]
            for i:= 2 to n do
                if a[i]>massimo then
                    massimo:=a[i]
            massimo_dell_array:=massimo
        end
    Fin qui, credo che tutto vada bene, ho provato a fare il mio schemino con i rettangoli, e pare andare (o diagrammi di flusso insomma).
    Andiamo oltre, in C (ho aggiunto qualche commento per avere coscienza di cosa stia facendo):
    codice:
     
    #include <stdio.h>
    #define DIM_ARRAY 5
     /* Abbiamo definito la dimensione massima di un ARRAY. Questo ci aiuta a immettere dei numeri in un ARRAY per poi confrontarli.
     */                
    main ()
    {
         int a[DIM_ARRAY];
         int i=0;
         int massimo=0;
      //costrutto per l'acquisizione dei valori
      /* 1 */   for (i=0;i<DIM_ARRAY;i++) {
      /* 2 */   printf("Immetti numero [%d]: ",i);
      /* 3 */   scanf("%d",&a[i]);
                }
      /*
      Nei primi 3 passi, abbiamo effettuato un controllo
      per l'immissione dei numeri nell'array 
      */
      /* 4 */   for (i=0;i<DIM_ARRAY;i++) {
      /* 5 */   printf("I valori immessi sono: [%d]\n",a[i]); 
                }
      /*
      In questi altri passi invece, verifichiamo che il costrutto precedente
      sia corretto stampando i valori a video
      */
      /*Entriamo nel ciclo ...
        E'  qui che inizia il dilemma
       */
                for (i=1;i<DIM_ARRAY;i++)
                 {
                    if (a[i]>a[i+1])
                    //if (a[i]==a[i+1]) 
                    { printf("\nSono tutti uguali\n");}
                    else
                    {
                    a[i]=massimo;
                    }
                 }
                 printf("Ok, esiste %d\n");                                 
                 system("PAUSE");
    }
    Il programma parte, mi fa immettere dei valori, e questi vengono stampati a video.
    L'entrata nel costrutto di controllo al fine di verificare se' ci sia il massimo ... bho' crea problemi.
    Non capisco pero' perche' si blocca - e come risolvere.

    Attendo una vostra.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il confronto lo devi fare con la variabile

    massimo

    e ogni elemento dell'array, non tra gli elementi dell'array, come avevi indicato in

    if a[i]>massimo

    ma che non esiste nel tuo codice C.

    E tieni ben presente che i vettori C iniziano con indice 0 (e non 1).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    13
    Versione: 0.0.1
    E' da queste parti allora il problema?

    codice:
                for (i=0;i<DIM_ARRAY;i++) // Ho cambiato i=1 ad i=0
                 {
                    if (a[i]>massimo) // Ho cambiato da a[i]>a[i+1] ad a[i]>massimo
                    { printf("\nSono tutti uguali\n");}
                    else
                    {
                    a[i]=massimo;
                    }
                 }
                 printf("Ok, esiste %d\n");                                 
                 system("PAUSE");
    }
    Eppure mi esce una cosa simile:

    codice:
    Immetti numero [0]: 56
    Immetti numero [1]: 1
    Immetti numero [2]: 2
    Immetti numero [3]: 3
    Immetti numero [4]: 4
    I valori immessi sono: [56]
    I valori immessi sono: [1]
    I valori immessi sono: [2]
    I valori immessi sono: [3]
    I valori immessi sono: [4]
    
    Sono tutti uguali
    
    Sono tutti uguali
    
    Sono tutti uguali
    
    Sono tutti uguali
    
    Sono tutti uguali
    Ok, esiste 4
    Premere un tasto per continuare . . .
    ... ho ancora sbagliato?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da devel ...
    Ma scusa ... fai un po' di attenzione ...

    Hai seguito lo pseudocodice che hai scritto ?

    Te lo ricordo ...

    i:=1
    massimo:=a[i]
    for i:= 2 to n do
    if a[i]>massimo then
    massimo:=a[i]
    massimo_dell_array:=massimo

    semplicemente considerando che gli indici in C non partono da 1 ma da 0 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    13
    Versione 0.0.2 (Finale)
    Di base, grazie di cuore.

    codice:
    #include <stdio.h>
    #define DIM_ARRAY 5
     /* Abbiamo definito la dimensione massima di un ARRAY 
     Questo ci aiuta a immettere dei numeri in un ARRAY
     per poi confrontarli
     */                
    main ()
    {
         int a[DIM_ARRAY];
         int i=0;
         int massimo=0;
      //costrutto perl'acquisizione dei valori
      /* 1 */   for (i=0;i<DIM_ARRAY;i++) {
      /* 2 */   printf("Immetti numero [%d]: ",i);
      /* 3 */   scanf("%d",&a[i]);
                }
      /*
      Nei primi 3 passi, abbiamo effettuato un controllo
      per l'immissione dei numeri nell'array 
      */
      /* 4 */   for (i=0;i<DIM_ARRAY;i++) {
      /* 5 */   printf("I valori immessi sono: [%d]\n",a[i]); 
                }
      /*
      In questi altri passi invece, verifichiamo che il costrutto precedente
      sia corretto 
      */
      /*Entriamo nel ciclo*/
      massimo=a[0]; 
                for (i=1;i<DIM_ARRAY;i++)
                 {
                    if (a[i]>massimo) {
                    printf("Ok, esiste\n"); 
                    massimo=a[i];
                    }                               
                 }
                 printf("\nIl valore massimo e': %d",massimo);
    system("PAUSE");
    }
    Qui sotto invece, la parte di codice che non mi funzionava.
    codice:
      /*Entriamo nel ciclo ...
        E'  qui che inizia il dilemma
       */
                for (i=1;i<DIM_ARRAY;i++)
                 {
                    if (a[i]>a[i+1])
                    //if (a[i]==a[i+1]) 
                    { printf("\nSono tutti uguali\n");}
                    else
                    {
                    a[i]=massimo;
                    }
                 }
                 printf("Ok, esiste %d\n");                                 
                 system("PAUSE");
    }
    Dopo svariati controlli sono arrivato alla riuscita del programma.

    Grazie oregon per il semplice consiglio di fare attenzione su un qualcosa che avevo gia'.
    Se necessitate di altre spiegazioni - o similari fatemi sapere.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Solo un ultimo appunto ... indicare che "esiste" il massimo non ha senso ...

    Il massimo e' il valore piu' grande, anche fosse il primo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    13
    Quel esiste - doveva indicarmi un aiuto "debug" - e` rimasto solo per affetto.

    Comunque ok, grazie dell`appunto.

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.