Funzione riportata nel main

di Anonimizzato29179 il
10 risposte
Salve a tutti! Vorrei sapere se qualcuno gentilmente potesse aiutarmi. Devo creare una funzione che lavora attraverso una matrice, la funzione penso sia corretta, il mio problema e' quando la riporto nel main

main() {
	struct list1* list1;
	struct list2* list2;
	int R = 2;
	int C = 3;
	int i = 0;
	int j = 0;
	float *A;
	int index;
	init1(&list1);
	init2(&list2);
	do {
		scanf("%s", selection);
		switch (selection[0]) {
		    case 'A':
				for (i = 0; i < R; i++) {
					for (j = 0; j < C; j++) {
						scanf("%f", A[C * i + j]);
			case 'a':
				index = float_index_max(&A, R, C);
				break;
			case 'b':
				to_two_list(A, R, C, &listZ, &listH);
		}
	}			
}


int float_index_max(float* A, int R, int C);
void to_two_list(float* A, int R, int C, struct list1** ptrptr1, struct list2** ptrptr2);
non ho riportato per intero le funzioni, sbaglio qualcosa nel riportare i parametri delle funzioni all'interno del main

10 Risposte

  • Ciao, manda tutto il codice, altrimenti si capisce poco
  • virgy.45 ha scritto:


    non ho riportato per intero le funzioni, sbaglio qualcosa nel riportare i parametri delle funzioni all'interno del main
    Se non hai localizzato il bug non puoi fare assunzioni: frasi come "penso" e "sbaglio qualcosa" fanno perdere tempo a te e agli altri
  • 
    main() {
    	struct list1* list1;
    	struct list2* list2;
    	int size;
    	size = 5;
    	char selection[10];
    	int R = 4;
    	int C = 6;
    	int i = 0;
    	int j = 0;
    	float *A;
    	int ind;
    	init1(&list1);
    	init2(&list2);
    	Boolean exit_required = FALSE;
    	do {
    		scanf("%s", selection);
    		switch (selection[0]) {
    		    case 'A':
    				for (i = 0; i < R; i++) {
    					for (j = 0; j < C; j++) {
    						scanf("%f", A[C * i + j]);
    					}
    				}
    				break;
    			case 'a':
    				ind = float_index_max(A, R, C);
    				break;
    			case 'b':
    				to_two_list(A, R, C, &list1, &list2);
    				break;
    	    }
    	}
    }	    
    
    int float_index_max(float* A, int R, int C) {
    	float mas = -999999;
    	int i, j;
    	int I = 0;
    	int J = 0;
    	for (i = 0; i < R; i++) { //ciclo sulle righe
    		for (j = 0; j < C; j++) { //ciclo sulle colonne
    			if (A[C * i + j] > mas) {
    				max = A[C * i + j];
    				I = i;
    				J = j;
    			}
    		}
    	}
    	return I;
    	return J;
    }
    
    void to_two_list(float* A, int R, int C, struct list1** ptrptr1, struct list2** ptrptr2) {
    	float mas_r = -999999;
    	float mas_c = -999999;
    	int i, j;
    	int I = 0;
    	int J = 0;
    	for (i = 0; i < R; i++) {
    		for (j = 0; j < C; j++) {
    			if (A[C * i + j] > mas_r) {
    				mas_r = A[C * i + j];
    				I = i;
    			}
    		}
    		suf_insert_index1(ptrptr1, I);
    	}
    	for (j = 0; j < C; j++) {
    		for (i = 0; i < R; i++) {
    			if (A[C * i + j] > mas_c) {
    				mas_c = A[C * i + j];
    				J = j;
    			}
    		}
    		suf_insert_index2(ptrptr2, J);
    	}
    }
    				
    				
  • E cosa dovrebbe fare questo programma?

    In paio diproblemi li ho visti, ma se non so cosa ci si aspetta di ottenere non posso pronunciarmi
  • Con la prima funzione vorrei ritornare gli indici del valore massimo all'interno della matrice, nel secondo caso vorrei inserire in due liste distinte i vari indici corrispondenti ai valori massimi all'interno delle righe e quelli all'interno delle colonne della matrice.
  • 1)quanti return ha la prima funzione?
    Cosa fa il return?


    2) cosa è A?
    Perche pur essendo una variabile lo hai scritto maiuscolo?
    E quanto vale?

    3) un 'do' non richiede un 'while' ?


    Occhio, che le mie non sono domande, ma spunti di riflessione

    Quindi prima rifletti, e dopo aver riflesso, letto, studiato e capito, allora rispondi
  • Ho messo due return perche' mi servono entrambi gli indici del valore massimo. I e J
    A sarebbe la mia matrice, sbaglio nel riportarla nel main? avendo utilizzato il puntatore quando torno nel main dovrei utilizzare il suo indirizzo, ma nel momento in cui metto &A si creano un sacco di errori
    
                           case 'a':
    				ind = float_index_max(&A, R, C);
    				break;
    			case 'b':
    				printf("\nCreo una lista con gli indici dei max di ciascuna riga, e una con quella di ciascuna colonna");
    				to_two_list(&A, R, C, &list1, &list2);
    				break;
    
    hai perfettamente ragione sul while, scusami tanto, ma il programma e' davvero lungo, e ho preso la parte che coinvolge la matrice.
  • Liste e puntatori a matrici sono argomenti complicati: non possono essere affrontati se non ti rendi conto da solo quando indirizzi a un puntatore nullo, oppure se non sai che nei prototipi delle funzioni non sei obbligato a usare gli stessi nomi delle variabili.

    Ripassa bene le basi. Nel frattempo puoi provare a risolvere con variabili globali
  • Sicuro che A sia una matrice?

    Come la dichiari?
  • Ho messo due return perche' mi servono entrambi gli indici del valore massimo. I e J
    Direi che bisognerebbe anche ripassare il funzionamento di alcune istruzioni come return ...

    Non è per non rispondere ma ci sono parecchi errori e usi sbagliati di "base" che necessitano di una rilettura del libro di testo, prima di una risposta in un forum.
Devi accedere o registrarti per scrivere nel forum
10 risposte