Scambio righe matrice c

di il
22 risposte

Scambio righe matrice c

Salve, avrei bisogno di scambiare righe pari di una matrice con quelle dispari, solo che mi scambia solo quelle della prima colonna e le altre no.

#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(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;
			}
			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;
}

22 Risposte

  • Re: Scambio righe matrice c

    Mi pare che nel ciclo delle inversipni non consideri completamente le colonne
  • Re: Scambio righe matrice c

    oregon ha scritto:


    Mi pare che nel ciclo delle inversipni non consideri completamente le colonne
    Secondo te come posso migliorarlo?
  • Re: Scambio righe matrice c

    RAGIONA,
    supponi di avere la matrice fatta di cubetti di legno colorati e doverlo fare A MANO!
  • Re: Scambio righe matrice c

    ToTomalux ha scritto:


    oregon ha scritto:


    Mi pare che nel ciclo delle inversipni non consideri completamente le colonne
    Secondo te come posso migliorarlo?
    Cosa ti ho scritto di controllare?
  • Re: Scambio righe matrice c

    migliorabile ha scritto:


    RAGIONA,
    supponi di avere la matrice fatta di cubetti di legno colorati e doverlo fare A MANO!
    Purtroppo sono alle prime armi e non sono molto esperto, per questo ho chiesto a voi
  • Re: Scambio righe matrice c

    Non solo sei inesperto nella scrittura di programmi, e fin qui ci puo' stare, ma anche di spostare dei semplici cubetti di legno.
    Sei sicuro che la programmazione faccia per te?
  • Re: Scambio righe matrice c

    migliorabile ha scritto:


    Non solo sei inesperto nella scrittura di programmi, e fin qui ci puo' stare, ma anche di spostare dei semplici cubetti di legno.
    Sei sicuro che la programmazione faccia per te?
    Lo sto imparando a scuola, mi alleno un po' a casa, imparerò
  • Re: Scambio righe matrice c

    ToTomalux ha scritto:


    per questo ho chiesto a voi
    Non ti si può scrivere il codice devi capire come fare ragionando con dei suggerimenti
  • Re: Scambio righe matrice c

    oregon ha scritto:


    ToTomalux ha scritto:


    per questo ho chiesto a voi
    Non ti si può scrivere il codice devi capire come fare ragionando con dei suggerimenti

    Allora, se io devo farlo con dei cubetti prenderei un intera fila e la sostitusco con quella successiva.
  • Re: Scambio righe matrice c

    Ti avevo scritto

    "nel ciclo delle inversipni non consideri completamente le colonne"

    Puoi dare un'occhiata al codice?
  • Re: Scambio righe matrice c

    Alcune considerazioni:
    - quel codice compila anche senza includere le librerie stdlib e time?
    - perchè inizializzi le variabili numrighe e numcolo a 0?
    - se si inseriscono valori di numrighe e numcolo non accettabili, non sarebbe meglio dare all'utente la possibilità di ripetere l'inserimento invece di terminare il programma?
    - perchè dichiari le variabili dato, numero e k?
    - guarda che rand()%11 non restituisce numeri compresi tra 1 e 10!

    Prima di entrare nel cuore del programma ti devo fare una domanda... cosa signififica (in italiano) "scambiare righe pari di una matrice con quelle dispari"?
  • Re: Scambio righe matrice c

    Nippolo ha scritto:


    Alcune considerazioni:
    - quel codice compila anche senza includere le librerie stdlib e time?
    - perchè inizializzi le variabili numrighe e numcolo a 0?
    - se si inseriscono valori di numrighe e numcolo non accettabili, non sarebbe meglio dare all'utente la possibilità di ripetere l'inserimento invece di terminare il programma?
    - perchè dichiari le variabili dato, numero e k?
    - guarda che rand()%11 non restituisce numeri compresi tra 1 e 10!

    Prima di entrare nel cuore del programma ti devo fare una domanda... cosa signififica (in italiano) "scambiare righe pari di una matrice con quelle dispari"?
    Allora, le due librerie me le ero dimenticate però funzionava lo stesso, le variabili dato, numero e k le avevo dichiarate perchè stavo facendo dei test sul codice e me li sono dimenticati, non capisco il tuo terzo punto, non capisco perchè non le devo inizializzare a 0.
    Quello che devo fare è questo: L’utente inserisce una matrice N × M composta da numeri interi. Il programma scambia le righe pari con quelle
    dispari. Le dimensioni della matrice vengono scelte dall’utente tra i valori massimi fissati all’interno del programma
    (10 × 20).
  • Re: Scambio righe matrice c

    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 ...
  • Re: Scambio righe matrice c

    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?
Devi accedere o registrarti per scrivere nel forum
22 risposte