Scambio righe matrice c

di il
22 risposte

22 Risposte - Pagina 2

  • Re: Scambio righe matrice c

    oregon ha scritto:


    Tu hai scritto, per scambiare i valori delle righe
    
             printf("Righe scambiate:\n");
             for(riga=0; riga<numrighe-1; riga=riga+2) //inverte le righe pari con quelle dispari
             {
                temp=miaMatrice[riga][colo];
                  miaMatrice[riga][colo]=miaMatrice[riga+1][colo];
                  miaMatrice[riga+1][colo]=temp;
             }
    
    ma qual è il valore di colo? Perché non varia mai?

    Te l'ho detto più volte e sembri ignorare la questione ...
    Non riesco a capire come lo devo inserire
  • Re: Scambio righe matrice c

    Nippolo ha scritto:


    ToTomalux ha scritto:


    non capisco perchè non le devo inizializzare a 0.
    Presumo tu ti riferisca al mio secondo punto. Premesso che inizializzare sempre le variabili (anche laddove non c'è nessun motivo logico per farlo) possa essere una buona pratica di programmazione (in quanto agevola, soprattutto in programmi costituiti da parecchie righe di codice, la ricerca di eventuali bug), semplicemente mi chiedevo come mai numrighe e numcolo le inizializzi, mentre riga, colo e temp no!

    ToTomalux ha scritto:


    non capisco il tuo terzo punto
    Intendo dare la possibilità all'utente di reinserire il valore numrighe o numcolo attraverso un ciclo.

    ToTomalux ha scritto:


    Il programma scambia le righe pari con quelle dispari
    Supponiamo di avere una matrice 7x11... se scambio la riga 2(pari) con la 5(dispari) il testo dell'esercizio è rispettato!
    Diciamo che secondo me la consegna poteva essere scritta in modo più chiaro.

    Sulla questione di rand()%11 non mi hai risposto. Quest'operazione non ritorna un numero tra 1 e 10, ma un numero compreso tra 0 e 10. Precisamente sai cosa fa l'operatore %?

    Per quanto riguarda il motivo per cui il programma non funziona correttamente, l'input ti è già stato dato da @oregon più volte.
    Un ulteriore suggerimento... perchè per stampare la matrice utilizzi due cicli annidati?
    Alcune variabili non ritenevo necessario inizializzare, ancora non lo so fare di reinizializzare il programma nel caso di errore, concordo che il testo sia poco specifico ma in teoria dovrebbe essere ogni riga pari con quella dispari successiva, a me va bene che i numeri siano da 0 a 10, non saprei come devo fare diversamente per i cicli annidati.
  • Re: Scambio righe matrice c

    ToTomalux ha scritto:


    oregon ha scritto:


    Tu hai scritto, per scambiare i valori delle righe
    
             printf("Righe scambiate:\n");
             for(riga=0; riga<numrighe-1; riga=riga+2) //inverte le righe pari con quelle dispari
             {
                temp=miaMatrice[riga][colo];
                  miaMatrice[riga][colo]=miaMatrice[riga+1][colo];
                  miaMatrice[riga+1][colo]=temp;
             }
    
    ma qual è il valore di colo? Perché non varia mai?

    Te l'ho detto più volte e sembri ignorare la questione ...
    Non riesco a capire come lo devo inserire
    Ma rispondi alle domande su colo
  • Re: Scambio righe matrice c

    Alcune variabili non ritenevo necessario inizializzare
    Come mai, quale criterio hai seguito?
    ancora non lo so fare di reinizializzare il programma nel caso di errore
    Hai studiato il ciclo while?
    a me va bene che i numeri siano da 0 a 10
    Non lo metto in dubbio, ma sarebbe meglio sapere quello che si sta facendo.
    non saprei come devo fare diversamente per i cicli annidati.
    Sinceramente non ho capito cosa intendi dire... proprio a livello di italiano!
    Mi sorge un dubbio, sai cosa si intende per cicli annidati?

    In ogni caso, guardando anche la risposta data ad @oregon, mi tocca dire che non vedo molta buona volontà da parte tua...
  • Re: Scambio righe matrice c

    oregon ha scritto:


    ToTomalux ha scritto:


    oregon ha scritto:


    Tu hai scritto, per scambiare i valori delle righe
    
             printf("Righe scambiate:\n");
             for(riga=0; riga<numrighe-1; riga=riga+2) //inverte le righe pari con quelle dispari
             {
                temp=miaMatrice[riga][colo];
                  miaMatrice[riga][colo]=miaMatrice[riga+1][colo];
                  miaMatrice[riga+1][colo]=temp;
             }
    
    ma qual è il valore di colo? Perché non varia mai?

    Te l'ho detto più volte e sembri ignorare la questione ...
    Non riesco a capire come lo devo inserire
    Ma rispondi alle domande su colo
    Il valore di colo dovrebbe partire da 0 ma non capisco come farlo variare
  • Re: Scambio righe matrice c

    E come lo hai fatto variare negli altri cicli?
  • Re: Scambio righe matrice c

    oregon ha scritto:


    E come lo hai fatto variare negli altri cicli?
    Con un ciclo For
  • Re: Scambio righe matrice c

    Vi ringrazio tutti per avermi fatto capire come devo fare e sono riuscito a risolvere. Vi allego il codice che ho utilizzato.
    
    #include <stdio.h>
    int main(void)
    {
    	int numrighe=0;
    	int numcolo=0;
    	int dato=1;
    	int riga, colo;
    	int numero=0;
    	int temp;
    	int k;
    	printf("Inserire il numero di righe desiderate: (max10) ");
    	scanf("%d",&numrighe);
    	printf("Inserire il numero di colonne desiderate: (max 20) ");
    	scanf("%d",&numcolo);
    	int miaMatrice [numrighe][numcolo];
    	srand((unsigned)time(NULL));
    	if(numrighe<11)//si possono inserire da 0 a 10 righe
    	{
    		if(numcolo<21)//si possono inserire da 0 a 20 colonna
    		{
    			for (riga=0; riga<numrighe; riga++)
    			{
    				for (colo=0;colo<numcolo;colo++)
    				{
    					miaMatrice[riga][colo]=rand()%11; //numeri da 1 a 10
    					printf("%3d", miaMatrice[riga][colo]);//stampa tutti i numeri randomici
    				}
    				printf("\n");
    			}
    			printf("\n\n");
    			printf("Righe scambiate:\n");
    			for(colo=0; colo<numcolo;colo++)
                {
    			for(riga=1; riga<numrighe-1; riga=riga+2) //inverte le righe pari con quelle dispari
    			{
    				temp=miaMatrice[riga][colo];
            		miaMatrice[riga][colo]=miaMatrice[riga+1][colo];
            		miaMatrice[riga+1][colo]=temp;
    			}
                }
    			for (riga=0; riga<numrighe; riga++)//stampa le righe invertite
    			{
    				for (colo=0;colo<numcolo;colo++)
    					printf("%3d", miaMatrice[riga][colo]);
    				printf("\n");
    			}
    		}
    		else
    		printf("Il numero di colonne inserito e' troppo alto.\nSi prega di reinizializzare il programma.");
    	}
    	else
    	printf("Il numero di righe inserito e' troppo alto.\nSi prega di reinizializzare il programma.");
    	return 0;
    }
    
    
Devi accedere o registrarti per scrivere nel forum
22 risposte