Passaggio dimensione array

di il
2 risposte

Passaggio dimensione array

Salve ragazzi/e,
nell'esame di informatica che ho appena sostenuto un esercizio chiedeva di scrivere due funzioni separate che, preso in ingresso un vettore e la sua dimensione, svolgessero due compiti distini: la prima doveva restituire il minimo e la sua posizione, la seconda doveva visitare l'array tante volte quante i suoi elementi, trovare il minimo, stamparlo e sovrascrivere 999999 nella sua posizione.

Il mio problema è questo: nel main chiedo ad utente la dimensione del vettore e da un file estraggo dei numeri che memorizzo nell'array; poi passo dimensione ed array ad entrambe le funzioni ma la seconda non riconosce più la variabile dimensione (che ho chiamato n) e mi tocca definire una seconda variabile dimensione (N) e chiedere nuovamente all'utente la dimensione dell'array; perchè non posso passare due volte la stessa variabile a funzioni diverse? Grazie

[//COMPITO 26/07/2018 - ESERCIZIO 1

#include <stdio.h>
#include <stdlib.h>

int *FindMin(int n, int array[n], int res[2]){
int i;
int min=999999;
int pos=0;
for(i=0; i<n; i++){
if(array<min){
min=array;
pos=i;
}
}
res[0]=min;
res[1]=pos;
int *ptr=&res;
return ptr;
}

void PrintMin(int n, int array[n]){
int i, j;
int min, tmp;
for(i=0; i<n; i++){
min=999999;
tmp=0;
for(j=0; j<n; j++){
if(array[j]<min){
min=array[j];
tmp=j;
}
}
printf("minimo attuale: %d\n", min);
array[tmp]=999999;
}
return 0;
}

int *FindMin(int n, int array[n], int res[2]);
void PrintMin(int n, int array[n]);

int main(void){
int n;
printf("inserire dimensione vettore: ");
scanf("%d", &n);
printf("\n");
int i;
int array[n];
FILE *stream;
stream=fopen("numeri.txt", "r");
if(stream==NULL){
printf("ERRORE: impossibile aprire file\n");
}
else{
printf("vettore memorizzato: \n");
for(i=0; i<n; i++){
fscanf(stream, "%d", &array);
printf("%d ", array);
}
}
printf("\n");
int res[2]={0, 0};
int *ptr=FindMin(n, array, res);
res[2]=&ptr;
printf("il minimo del vettore memorizzato e' %d e si trova in posizione %d\n", res[0], res[1]);
printf("\n");
int N;
printf("inserire nuovamente dimensione del vettore: \n");
scanf("%d", &N);
printf("\nstampa dei minimi: \n");
PrintMin(N, array);
return 0;
}
][/code]

2 Risposte

  • Re: Passaggio dimensione array

    Guarda ... nell'uso che fai di res e ptr ci sono errori gravi e non so neanche come non sia stato evidenziato nessun errore dal compilatore.
    In pratica, il codice con le correzioni dovrebbe essere questo
    
    #include <stdio.h>
    #include <stdlib.h>
    
    void FindMin(int n, int array[n], int res[2]) {
    	int i;
    	int min = 999999;
    	int pos = 0;
    	for (i = 0; i<n; i++) {
    		if (array[i]<min) {
    			min = array[i];
    			pos = i;
    		}
    	}
    	res[0] = min;
    	res[1] = pos;
    }
    
    void PrintMin(int n, int array[MAXN]) {
    	int i, j;
    	int min, tmp;
    	for (i = 0; i<n; i++) {
    		min = 999999;
    		tmp = 0;
    		for (j = 0; j<n; j++) {
    			if (array[j]<min) {
    				min = array[j];
    				tmp = j;
    			}
    		}
    		printf("minimo attuale: %d\n", min);
    		array[tmp] = 999999;
    	}
    }
    
    int main(void) {
    	int n;
    	printf("inserire dimensione vettore: ");
    	scanf("%d", &n);
    	printf("\n");
    	int i;
    	int array[n];
    	FILE *stream;
    	stream=fopen("numeri.txt", "r");
    	if (stream == NULL) {
    		printf("ERRORE: impossibile aprire file\n");
    		return(1);
    	}
    	else {
    		printf("vettore memorizzato: \n");
    		for (i = 0; i<n; i++) {
    			fscanf(stream, "%d", &array[i]);
    			printf("%d ", array[i]);
    		}
    	}
    	printf("\n");
    	int res[2] = { 0, 0 };
    	FindMin(n, array, res);
    	printf("il minimo del vettore memorizzato e' %d e si trova in posizione %d\n", res[0], res[1]);
    	printf("\n");
    	
    	printf("\nstampa dei minimi: \n");
    	PrintMin(n, array);
    
    	return 0;
    }
    Molto probabilmente quell'uso sbagliato dei puntatori sporcava in memoria il valore di n e per questo avevi il problema. Ma non era il problema più grave.
  • Re: Passaggio dimensione array

    Ti ringrazio, adesso compila
Devi accedere o registrarti per scrivere nel forum
2 risposte