PDA

Visualizza la versione completa : [C++] Funzioni e array


gaten
20-11-2010, 14:15
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

Celebron
20-11-2010, 14:46
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?

minomic
20-11-2010, 14:52
ciao gaten se voui calcolare il massimo di un array di 10 numeri (come suppongo) un esempio può essere questo:


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

MdE2005
20-11-2010, 14:55
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.. :nonono:

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++:


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 :)

gaten
20-11-2010, 15:26
In realtà volevo capire come gestire l'array dalla funzione, cioè passare l'array come parametro di input e gestirlo.

MdE2005
20-11-2010, 15:39
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? :bhò:

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:


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.. :D

gaten
20-11-2010, 17:13
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.



#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

Celebron
20-11-2010, 17:32
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.



#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


max=maxElement(A, i);


e scrivi la funzione come


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.

gaten
20-11-2010, 17:37
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..

Celebron
20-11-2010, 17:46
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



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

Loading