Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [C++] Funzioni e array

  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    Funzioni e array

    Salve ragazzi poichè stò studiando le funzioni, sono venuto a conoscenza che appunto nelle funzioni non è lecito utilizzare funzioni come scanf o cin, perchè spesso vengono gestiti dei parametri di input.

    Adesso praticamente dovrei calcolare il massimo valore di un array[10] magari di 10 elementi, qualcuno può farmi capire come gestire man mano i valori nell'array senza inserirli tramite funzione?

    Grazie anticipatamente gaten
    Con i sogni possiamo conoscere il futuro...

  2. #2

    Re: Funzioni e array

    Originariamente inviato da gaten
    Salve ragazzi poichè stò studiando le funzioni, sono venuto a conoscenza che appunto nelle funzioni non è lecito utilizzare funzioni come scanf o cin, perchè spesso vengono gestiti dei parametri di input.

    Adesso praticamente dovrei calcolare il massimo valore di un array[10] magari di 10 elementi, qualcuno può farmi capire come gestire man mano i valori nell'array senza inserirli tramite funzione?

    Grazie anticipatamente gaten
    dove hai letto che non è lecito? Dipende dai contesti. In alcuni è necessario, in altri può andare evitato

    in ogni caso non comprendo la tua domanda
    vuoi capire come calcolare il valore massimo di un array di 10 elementi o cosa?

  3. #3
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    ciao gaten se voui calcolare il massimo di un array di 10 numeri (come suppongo) un esempio può essere questo:
    codice:
        int array [10];
        int i, max;
        for(i = 0; i<10; ++i) {
            cout<<"Inserire il prossimo valore: ";
            cin>>array [i];
        }
        max = array[0];
        for(i = 0; i<10; ++i) {
            if (array[i] > max) {
                max = array[i];
            }
        }
        cout<<"Il massimo e' "<<max<<endl;
    }
    fammi sapere se è tutto chiaro

  4. #4
    Originariamente inviato da gaten
    Salve ragazzi poichè stò studiando le funzioni, sono venuto a conoscenza che appunto nelle funzioni non è lecito utilizzare funzioni come scanf o cin, perchè spesso vengono gestiti dei parametri di input.

    Adesso praticamente dovrei calcolare il massimo valore di un array[10] magari di 10 elementi, qualcuno può farmi capire come gestire man mano i valori nell'array senza inserirli tramite funzione?

    Grazie anticipatamente gaten
    Ti stai riferendo a qualche linguaggio particolare (C o C++ evidentemente..) oppure no? In tal caso lo devi inserire nel titolo..

    Sul discorso delle funzioni e dell'input è difficile fare un discorso generale, in genere prima si acquisiscono dei dati, poi si chiama una funzione che li processa/elabora.

    Nella fattispecie dell'array, ti consiglio di ottenere gli elementi dell'array e, una volta ottenuti, passi l'array ad una funzione, che provvederà a scorrere l'array e a determinare l'indice dell'elemento con il massimo valore.
    Piccolo esempio in C++:
    codice:
      
    int MaxElement (int array[]){
       int max = 0;
       for (int i = 0; i<=9; i++){
           if (array[i] >= max)
             max = array[i];}
       return max;
    }
    
    int main(int argc, char * argv[])
    {
        int array[10] = {1,4,2,6,4,7,3,9,1,2};
        cout << "Il massimo valore è : " << MaxElement(array);
        system("pause");
        return EXIT_SUCCESS;
    }
    Una cosa del genere..
    Ovviamente questa non è la soluzione migliore, è solo un piccolo esempio scritto di getto, in realtà spesso si contempla anche il numero di elementi massimi.
    Per quanto riguarda l'uso di scanf, ti dico subito che è bene evitarlo: ho già parlato qualche settimana fa della scorrettezza formale e non solo di tale comando, se fai una ricerca nel forum lo troverai sicuramente.


    Ciao

  5. #5
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    In realtà volevo capire come gestire l'array dalla funzione, cioè passare l'array come parametro di input e gestirlo.
    Con i sogni possiamo conoscere il futuro...

  6. #6
    Originariamente inviato da gaten
    In realtà volevo capire come gestire l'array dalla funzione, cioè passare l'array come parametro di input e gestirlo.
    E lo hai capito?

    Nel tuo caso non dovevi modificare l'array passato alla funzione stessa, dovevi solo analizzarlo. Può capitare (e succederà moltissime volte) che la funzione debba modificare il valore passato come input: in questi casi si rende necessario l'utilizzo dei puntatori (non so se già li hai studiati); sfrutto un esempio postato da un utente pochi giorni fa:
    codice:
      
    int incremento(int* x);
    
    int main(int argc, char *argv[])
    {
        int a=0;
        incremento(&a);
        cout<<a;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    int incremento(int* x)
    {
        (*x)++;
    }
    In quel caso la variabile passata alla funzione viene modificata (nel caso specifico aumenta di 1).


    Ciao


    PS: spero che l'utente MItaly non mi chieda risarcimento per infrazione del copyright..

  7. #7
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Io qui parlo di array.

    Supponiamo di riempire dinamicamente un array, un vettore di 10 elementi interi.
    Adesso il mio problema stà nel riempire l'array dal programma chiamante(main) e man mano che inserisco i valori, controllo se il nuovo numero inserito risulta essere maggiore di quelli precedenti. Capito?

    es.

    codice:
    #include <stdio.h>
    
    define N 10
    int maxElement(int A, int numero, int* p);
    
    int main(int argc, char *argv[])
    {
    int A[N];
    int numero;
    int i, max;
    
    for(i=0; i<N; i++){
    printf("Inserisci il nuovo numero:\n");
    scanf("%d", numero);
    A[i]=numero;
    max=setArray(A, numero, &i);
    }
    
    printf("Il valore massimo dell'array:\t%d", max);
    }
    
    int maxElement(int A, int numero, int* p){
    int massimo;
    k=*p;
    
    if(k==0)
    massimo=A[k];
    else if (A[k]>massimo)
    massimo=A[k];
    
    return massimo;
    }
    }
    Ecco ho creato una cosa del genere, ma non sò se vada bene.
    Come potete notare, io man mano che riempio l'array nel programma chiamante(main), nello stesso tempo, richiamo la funzione maxElement che mi permette di capire qual'è il massimo.
    Va bene?

    Grazie anticipatamente
    Con i sogni possiamo conoscere il futuro...

  8. #8
    Originariamente inviato da gaten
    Io qui parlo di array.

    Supponiamo di riempire dinamicamente un array, un vettore di 10 elementi interi.
    Adesso il mio problema stà nel riempire l'array dal programma chiamante(main) e man mano che inserisco i valori, controllo se il nuovo numero inserito risulta essere maggiore di quelli precedenti. Capito?

    es.

    codice:
    #include <stdio.h>
    
    define N 10
    int maxElement(int A, int numero, int* p);
    
    int main(int argc, char *argv[])
    {
    int A[N];
    int numero;
    int i, max;
    
    for(i=0; i<N; i++){
    printf("Inserisci il nuovo numero:\n");
    scanf("%d", numero);
    A[i]=numero;
    max=setArray(A, numero, &i);
    }
    
    printf("Il valore massimo dell'array:\t%d", max);
    }
    
    int maxElement(int A, int numero, int* p){
    int massimo;
    k=*p;
    
    if(k==0)
    massimo=A[k];
    else if (A[k]>massimo)
    massimo=A[k];
    
    return massimo;
    }
    }
    Ecco ho creato una cosa del genere, ma non sò se vada bene.
    Come potete notare, io man mano che riempio l'array nel programma chiamante(main), nello stesso tempo, richiamo la funzione maxElement che mi permette di capire qual'è il massimo.
    Va bene?

    Grazie anticipatamente
    la tua maxElement che fa? E soprattutto che è la setArray? Visto che i parametri sono gli stessi deduco che hai sbagliato a chiamarle con nomi diversi.
    comunque
    se k non è uguale a 0 (cioè sempre tranne il primo caso) massimo non viene inizializzato e quindi il controllo
    else if (A[k] > massimo) è insensato perchè il valore di massimo è imprevedibile
    In più non capisco perchè passi i per riferimento se tanto non la devi modificare.
    insomma quella funzione non è corretta

    Se vuoi come dici usare una funzione che ti trovi il massimo dell'array mentre la riempi, chiami
    codice:
    max=maxElement(A,  i);
    e scrivi la funzione come
    codice:
    int maxElement(int* A,  int i){
    
    int j;
    int max = A[0]; 
    //così risolvi anche il caso particolare della chiamata di questa funzione quando solo la prima "casella" del vettore è piena
    
       for(j=0; j<i; j++){ //controlla il vettore solo sino a dove è stato riempito
          if( A[j] > max) max = A[j];
      }
    
       return max;
    }
    Ti faccio comunque notare che è una soluzione enormemente inefficiente per l'uso che ne fai. Sarebbe molto più semplice (e soprattutto di costo lineare) prima completare tutto il vettore e solo dopo cercare il suo massimo una volta per tutte.
    Quello che chiedi tu può avere senso solo se devi usare ogni massimo particolare, all'interno del for di riempimento, per qualche altro scopo o altra funzione. Questo potrebbe giustificare il costo quasi quadratico.

  9. #9
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Continueremo questo thread all'infinito. IO DEVO CREARE UNA FUNZIONE CHE MI PERMETTE DI RICAVARE IL MAX MAN MANO CHE INSERISCO I VALORI DAL PROGRAMMA CHIAMATE

    INSERISCO se il numero inserito e il massimo lo salvo..
    dopo di chè la stessa cosa
    INSERISCO DAL PROGRAMMA CHIAMATE? RICHIAMO LA FUNZIONE CONTROLLO SE IL VALORE PRECEDENTE E MINORE etc... etc.. etc..
    Con i sogni possiamo conoscere il futuro...

  10. #10
    Originariamente inviato da gaten
    Continueremo questo thread all'infinito. IO DEVO CREARE UNA FUNZIONE CHE MI PERMETTE DI RICAVARE IL MAX MAN MANO CHE INSERISCO I VALORI DAL PROGRAMMA CHIAMATE

    INSERISCO se il numero inserito e il massimo lo salvo..
    dopo di chè la stessa cosa
    INSERISCO DAL PROGRAMMA CHIAMATE? RICHIAMO LA FUNZIONE CONTROLLO SE IL VALORE PRECEDENTE E MINORE etc... etc.. etc..
    allora è ancora più semplice

    fai una funzione che passa solo A[attuale] e il precedente massimo, trattando a parte solo il caso particolare di quando stai riempiendo la prima casella

    codice:
    int main(int argc, char *argv[])
    {
       int A[N];
       int numero;
       int i, max;
    
       for(i=0; i<N; i++){
          printf("Inserisci il nuovo numero:\n");
          scanf("%d", numero);
          A[i]=numero;
          if(i==0) max =A[i];
          else max = setMax(max, A[i]);
    }
    la funzione setMax non te la scrivo visto che è proprio banale, si tratta di un confronto
    ma ripeto, non comprendo a che ti serva

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 © 2025 vBulletin Solutions, Inc. All rights reserved.