Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] Problema di base con matrici

    ciao a tutti, da poco a scuola abbiamo iniziato il c++ e subito giu con le matrici

    il codice riempe una matrice 3x3 con i valori da 1 a9 e poi deve copiarli nella matrice2 nell'ordine inverso ([0][0] diventa [2][2]).
    inoltre lo scambio deve essere fatto seguendo questo percorso:

    codice:
    --->---|
           |
    ---<---|
    |
    |-->----
    in teoria saprei come fare, solo che all'esecuzione da o err e 0 warn ma da "matrice.exe il prog ha eseguito un operazoine nn valida e verrà terminato"
    prima avevo anche provato a prendere i valori in input da tastiera, li prenderva e sutbito dopo errore...

    che c'è che nn va?!?

    codice:
    #include "iostream.h"
    #include "stdio.h"
    #include "string.h"
    
    int inv(int f){
    int tmp;
    tmp=f;
    	switch(tmp){
    	case 1:
    		f= 3;
    		break;
    	case 3:
    		f=1;
    		break;
    	}
    return tmp;
    }		
    
    int main()
    {
    	  
    int v1[2][2];
    int v2[2][2];
    int r,c,ir,ic;
    
    cout << "Input valori\n";
    for(r=0;r<3;r++){
    
    	for(c=0;c<3;c++){
    		v1[r][c]=(r-1)*3 +c;
    		cout<< v1[r][c];
    }}
    
    r=0;
    c=0;
    
    for(r=0;r<3;r++){
    	for(c=0;c<3;c++){
    		cout <<"Ciao\n";
    		ir=inv(r);
    		ic=inv(c);
    		if(r%2==0){ //pari
    			v2[r][c]=v1[ir][ic];
    		}else{
    			v2[ir][ic]=v1[r][c];
    		}
    		cout<< r << " - " << c << "\n";
    	}
    }
    
    cout << "Matrice1\n";
    for(r=0;r<3;r++){
    	for(c=0;c<3;c++){
    		cout << v1[r][c] <<"\t";
    	}
    	cout << "\n";
    }
    	cout << "\n\n";
    
    cout << "Matrice2\n";
    for(r=0;r<3;r++){
    	for(c=0;c<3;c++){
    		cout << v2[r][c] <<"\t";
    	}
    	cout << "\n";
    }
    return 0;
    
    }

  2. #2
    non ho analizzato tutto il codice ma controlla questo

    cout << "Input valori\n";
    for(r=0;r<3;r++){
    ...
    for(c=0;c<3;c++){
    // attenzione questa riga deve essere sbagliata vedi sotto
    // v1[r][c]=(r-1)*3 +c;
    v1[r][c]=r*3 +c;
    cout<< "v1[r][c]" << v1[r][c] << "\n";
    }}
    ...
    questo [ il mio output
    [sergio@localhost tmp]$ ./a.out
    Input valori
    v1[r][c]0
    v1[r][c]1
    v1[r][c]2
    v1[r][c]3
    v1[r][c]4
    v1[r][c]5
    v1[r][c]6
    v1[r][c]7
    v1[r][c]8
    Ciao
    0 - 0
    Ciao
    0 - 1
    Ciao
    0 - 2
    Ciao
    1 - 0
    Ciao
    1 - 1
    Ciao
    1 - 2
    Ciao
    2 - 0
    Ciao
    2 - 1
    Ciao
    2 - 2
    Matrice1
    6 7 8
    8 4 6
    6 7 8


    Matrice2
    0 1 3
    3 4 6
    6 7 8
    [sergio@localhost tmp]$

    ciao

  3. #3
    Originariamente inviato da mondobimbi
    non ho analizzato tutto il codice ma controlla questo

    cout << "Input valori\n";
    for(r=0;r<3;r++){
    ...
    for(c=0;c<3;c++){
    // attenzione questa riga deve essere sbagliata vedi sotto
    // v1[r][c]=(r-1)*3 +c;
    v1[r][c]=r*3 +c;
    cout<< "v1[r][c]" << v1[r][c] << "\n";
    }}
    ...
    eh no xke se devo riempire con vlaori crescenti da 1 a 9 col modo tuo il primo num sarebbe r*3+1 = 1*3+1=4
    mentre come dico io (r-1)*3+1 (1-1)*3=0+1=1

    il problema rimane :master:

  4. #4
    fai attenzione, al primo passaggio r=0 e quindi verrebbe (0-1)*3+0=-3
    ciao

  5. #5
    ah giusto quindi deve essere r+1

    cmq il problema peggiora, il debug mi segna l'errore in

    int main()
    { <<<<= qui

    cosa può essere?
    x esperienza di solito questi errori vengono se non si rispetta la scrittura o si lascia aperta una parentesi o cose simili..

  6. #6
    cioè r volevo dire -___-

    cmq il debug mi da:

    codice:
    18:
    19:   int main()
    20:   {                 <<= qui c'è la freccina gialla
    00401080   push        ebp
    00401081   mov         ebp,esp
    00401083   sub         esp,70h
    00401086   push        ebx
    00401087   push        esi
    00401088   push        edi
    00401089   lea         edi,[ebp-70h]
    0040108C   mov         ecx,1Ch
    00401091   mov         eax,0CCCCCCCCh
    00401096   rep stos    dword ptr [edi]
    21:
    22:   int v1[2][2];
    23:   int v2[2][2];
    24:   int r,c,ir,ic;

  7. #7
    no deve essere
    v1[r][c]=r*3 +c;
    controlla il mio output e vedrai che la prima parte &egrave; giusta.
    Io l'ho compilata con g++.
    ciao
    sergio

  8. #8
    Originariamente inviato da mondobimbi
    no deve essere
    v1[r][c]=r*3 +c;
    controlla il mio output e vedrai che la prima parte &egrave; giusta.
    Io l'ho compilata con g++.
    ciao
    sergio
    io ho
    v1[r][c]=r*3 +c;

    e da errore lo stesso...

  9. #9
    con dev c++ me lo fa partire bene!
    non fa quello che voglio ma almeno parte

    a parte ke microsoft fa schifo, che problema può essere?

  10. #10
    non mi sono accorto dell'errore

    <quote>
    int v1[2][2];
    int v2[2][2];
    </quote>

    devi fare
    int * v1 = (int *) malloc (9);
    int * v2 = (int *) malloc (9);

    per allocare la memoria, è per questo che ti dà errore.

    ciao
    sergio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.