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.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.
Ecco ho creato una cosa del genere, ma non sò se vada bene.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; } }
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
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
e scrivi la funzione comecodice:max=maxElement(A, i);
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.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; }
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.