Scambio valore matrice con un'altra

di il
14 risposte

Scambio valore matrice con un'altra

Ciao a tutti, qualcuno sarebbe disposto ad aiutarmi? Ho provato ad abbozzare il ragionamento ma non funziona. Ho sicuramente fatto un casino con le variabili.
int r2,r3,c2,c3,comodo,salva1[r2][c2],salva2[r3][c3];
printf("\n riga dove si vuole sostituire il massimo:\n");
scanf("%d",&r);
printf("\n colonna dove si vuole sostituire il massimo:\n");
scanf("%d",&c);
printf("\nIl valore avente coordinate (%d,%d) e': %d\n da sostituire con:",r,c,mat[r][c]);
comodo=salva1[r2][c2];
salva1[r2][c2]=salva2[r3][c3];
salva2[r3][c3]=salva1[r2][c2];
Non so se è meglio se è meglio se allego tutto il programma

14 Risposte

  • Re: Scambio valore matrice con un'altra

    Ciao dovrest condividere quanto hai fatto altrimenti non ti si può aiutare.
  • Re: Scambio valore matrice con un'altra

    Toki ha scritto:


    Ciao dovrest condividere quanto hai fatto altrimenti non ti si può aiutare.
    hai ragione, essendo nuovo non avevo ancora capito come si faceva
  • Re: Scambio valore matrice con un'altra

    Intanto non puoi scrivere in quel modo la prima linea perché le dimensioni delle matrici non sono note. I valori di r2 c2 e così via devono essere impostati prima di dimensionare le matrici.

    Poi devi scambiare i corrispondenti valori di riga r e colonna c quindi devi usare r e c come indici sempre e l'ultima riga devi cambiarla usando la variabile comodo usata in precedenza.

    Pensa a tutto come se fossero dei secchi d'acqua di cui devi scambiare il contenuto
  • Re: Scambio valore matrice con un'altra

    oregon ha scritto:


    Intanto non puoi scrivere in quel modo la prima linea perché le dimensioni delle matrici non sono note. I valori di r2 c2 e così via devono essere impostati prima di dimensionare le matrici.

    Poi devi scambiare i corrispondenti valori di riga r e colonna c quindi devi usare r e c come indici sempre e l'ultima riga devi cambiarla usando la variabile comodo usata in precedenza.

    Pensa a tutto come se fossero dei secchi d'acqua di cui devi scambiare il contenuto
    ti ringrazio moltissimo, ho modificato ciò che mi hai detto, ma anche se inserisco 1 non mi procede con nessuna istruzione. Non so se invece sto sbagliando da una'ltra parte, però per il resto i calcoli mi funzionano tutti. Sinceramente le matrici tra tutti gli argomenti fatti finora sono quelli che mi mettono più in difficoltà.
  • Re: Scambio valore matrice con un'altra

    Ti avevo detto di usare sempre r e c nelle righe per lo scambio. Se devi scambiare gli elementi di indice r e c perché usi r2 c2 r3 c3 che non servono?

    Anche se non capisco a cosa ti serve scambiare elementi di due matrici locali che non hanno nessun dato e spariscono all'uscita della funzione. Sicuro di conoscere il C?

    P.S. usa i tag code quando posti il codice sul forum
  • Re: Scambio valore matrice con un'altra

    oregon ha scritto:


    Ti avevo detto di usare sempre r e c nelle righe per lo scambio. Se devi scambiare gli elementi di indice r e c perché usi r2 c2 r3 c3 che non servono?

    Anche se non capisco a cosa ti serve scambiare elementi di due matrici locali che non hanno nessun dato e spariscono all'uscita della funzione. Sicuro di conoscere il C?

    P.S. usa i tag code quando posti il codice sul forum
    ok grazie. Si certo che lo conosco, lo studio da due anni. Il funzionamento di questo programma consiste nel ricreare lo stesso funzionamento del sudoku. dopodiché devo poter scegliere se scambiare o meno dei numeri precedentemente inseriti, solo che non so bene come fare questa cosa visto che sono stato assente alla spiegazione. Non mi prendere per stupido, però delle volte non capisco niente e altre riesco a fare quasi un programma intero da solo. Non so sinceramente perchè una cosa così stupida mi sta mettendo in crisi.
  • Re: Scambio valore matrice con un'altra

    Strano... ci sono errori macroscopici... dopo 2 anni di studio questi errori non si dovrebbero fare.

    Ad esempuo, ancora non capisco a cosa ti serve lo scambio se le matrici sono locali....
  • Re: Scambio valore matrice con un'altra

    oregon ha scritto:


    Strano... ci sono errori macroscopici... dopo 2 anni di studio questi errori non si dovrebbero fare.

    Ad esempuo, ancora non capisco a cosa ti serve lo scambio se le matrici sono locali....
    errori penso solo nel void scambia, perchè per il resto mi funziona tutto. invece per l'operazione dello scambio non so, me l'ha detto il mio insegnante di farlo
  • Re: Scambio valore matrice con un'altra

    Mi pare che ce n'erano altri ma hai eliminato il codice dalla discussione e non posso dirti di piu

    Comunque anche il dimensionamento di matrici con indici non inizializzati è un errore grave
  • Re: Scambio valore matrice con un'altra

    oregon ha scritto:


    Mi pare che ce n'erano altri ma hai eliminato il codice dalla discussione e non posso dirti di piu
    rieccolo, però le altre parti me le ha controllate l'insegnante e per lui andava tutto bene
    #include<stdio.h>
    #include<stdlib.h>
    #include<windows.h>
    int r,c,d1=0,d2=0;
    int n,es,f,k;
    int r1,c1,n1;
    int cifra[9];
    int tr[3];
    int tc[3];
    int mat[3][3];
    void inserimento();
    void controllo();
    void stampa();
    void calcola();
    void azzeramento1();
    void azzeramento2();
    void azzeramento3();
    void scambia();
    int mettid(int sotto,int sopra);
    void selector(unsigned short color)
    {
    	HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
    	SetConsoleTextAttribute(hCon,color);
    }
    main()
    {
    	system("color 0F");
    	azzeramento1();
    	azzeramento2();
    	azzeramento3();
    	stampa();
    	do
    	{
    		controllo();
    		calcola();
    		stampa();
    		inserimento();
    	}
    	while(es==0);
    	do
    	{
    		printf("\n 0=fine lavoro 1=scambia \n");
    		k=mettid(0,1);
    		if(k==1)
    		{
    			scambia;
    			calcola;
    			stampa;
    		}
    	}
    	while(es==0);
    	printf("\n");
    	system("pause");
    }
    void scambia()
    {
    	int r2=0,r3=0,c2=0,c3=0,comodo,salva1[3][3],salva2[3][3];
    	printf("\n riga dove si vuole sostituire il massimo:");
    	scanf("%d",&r);
    	printf("\n colonna dove si vuole sostituire il massimo:");
    	scanf("%d",&c);
    	printf("\nIl valore avente coordinate (%d,%d) e': %d\n da sostituire con:",r,c,mat[r][c]);
    	comodo=salva1[r][c];
        salva1[r][c]=salva2[r][c];
        salva2[r][c]=comodo;
    }
    void stampa()
    {
    	system("cls");
    	selector(30);
    	printf("      Quadrato Magico ");
    	printf("\n\n");
    	selector(2);
    	printf("        1");
    	printf("    2");
    	printf("    3");
    	for(r=0;r<3;r++)
    	{
    		selector(2);
    		printf("\n\n %3d",r+1);
    		selector(11);
    		for(c=0;c<3;c++)
    		{
    			printf(" %4d",mat[r][c]);
    		}
    		selector(12);
    		printf("%5d",tr[r]);
    	}
    	selector(14);
    	printf("\n\n %3d",d2);
    	selector(12);
    	for(c=0;c<3;c++)
    	{
    		printf(" %4d",tc[c]);
    	}
    	selector(14);
    	printf("%5d",d1);
    	printf("\n\n");
    }
    void calcola()
    {
    	azzeramento2();
    	for(r1=0;r1<3;r1++)
    	{
    		tr[r1]=mat[r1][0]+mat[r1][1]+mat[r1][2];
    	}
    	for(c1=0;c1<3;c1++)
    	{
    		for(r1=0;r1<3;r1++)
    		{
    			tc[c1]=tc[c1]+mat[r1][c1];
    		}	
    	}
    	d2=mat[0][2]+mat[1][1]+mat[2][0];
    	d1=mat[0][0]+mat[1][1]+mat[2][2];
    }
    void controllo()
    {
    	selector(15);
    	do
    	{
    		printf("\n riga ");
    		r=mettid(1,3);
    		r=r-1;
    		printf("\n colonna ");
    		c=mettid(1,3);
    		c=c-1;
    	}
    	while(mat[r][c]>0);
    	selector(14);
    	printf("\n valore ");
    	for(f=0;f<9;f++)
    	{
    		if(cifra[f]==0)
    		{
    			printf("%d",f+1);
    		}
    	}
    	printf("\n");
    	do
    	{
    		n=mettid(1,9);
    	}
    	while(cifra[n-1]>0);
    	cifra[n-1]=n;
    	mat[r][c]=n;
    }
    void azzeramento2()
    {
    	for(r=0;r<3;r++)
    	{
    		tr[r]=0;
    		tc[r]=0;
    	}
    }
    void azzeramento1()
    {
    	for(r=0;r<3;r++)
    	{
    		for(c=0;c<3;c++)
    		{
    			mat[r][c]=0;
    		}
    	}
    }
    void azzeramento3()
    {
    	for(r=0;r<9;r++)
    	{
    		cifra[r]=0;
    	}
    }
    void inserimento()
    {
    	es=1;
    	for(r=0;r<3;r++)
    	{
    		for(c=0;c<3;c++)
    		{
    			if(mat[r][c]==0)
    			{
    				es=0;
    			}
    		}
    	}
    }
    int mettid(int sotto,int sopra)
    {
    	int pippo;
    	do
    	{
    		printf("(%d - %d): ",sotto,sopra);
    		scanf("%d",&pippo);
    	}
        while(pippo<sotto || pippo>sopra);
        return pippo;
    }
  • Re: Scambio valore matrice con un'altra

    Nel secondo ciclo a cosa serve il controllo con la variabile es?
  • Re: Scambio valore matrice con un'altra

    oregon ha scritto:


    Nel secondo ciclo a cosa serve il controllo con la variabile es?
    ma intendi il secondo ciclo do while nel main? perchè se intendi quello è sempre per lo scambio, invece per il void inserimento serve per verificare quali celle sono azzerate
  • Re: Scambio valore matrice con un'altra

    Sì il secondo.. ma chiedevo cosa c'entra es
  • Re: Scambio valore matrice con un'altra

    oregon ha scritto:


    Sì il secondo.. ma chiedevo cosa c'entra es
    lì nulla, avendo copiato e incollato il ciclo sopra non la ho ancora cambiata
Devi accedere o registrarti per scrivere nel forum
14 risposte