Matrici in c++

di il
12 risposte

Matrici in c++

Salve a tutti: ho un problema con questo codice

#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
void carica(int m[][], int &r, int &c);
void stampa(int m[][], int r, int c);
int main(int argc, char **argv)
{
    int m[40][40];
    int r, c;
	carica(m,r,c);
    stampa(m,r,c);
    
	return 0;
}

void carica(int m[][], int &r, int &c)
{
    cout<<"inserisci il numero di righe: ";
    cin>>r;
    cout<<"inserisci il numero di colonne: ";
    cin>>c; 
    cout<<endl;
    for(int i=0; i<r; i++)
       for(int j=0; j<c; j++)
        {
            cout<<"inserisci un numero: ";
            cin>>[i][j];
        }   

    
}

void stampa(int m[][], int r, int c)
{
    
    for(int i=0; i<r; i++)
    {   
        for(int j=0; j<c; j++)
        {
            cout<<[i][j]<<"   ";
        }   
        cout<<endl;
    }
}
non riesco a capire che sto sbagliando mi da 10 errori:

C:\Windows\system32\cmd.exe /C "C:/TDM-GCC-64/bin/mingw32-make.exe -j4 SHELL=cmd.exe -e -f Makefile"
"----------Building project:[ filenome - Debug ]----------"
mingw32-make.exe[1]: Entering directory 'C:/Users//Desktop/Gabriele/LinguaggioC/filenome'
C:/TDM-GCC-64/bin/g++.exe -c
"C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp" -g -O0 -Wall -o ./Debug/main.cpp.o -I. -I.
C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:5:21: error: declaration of 'm' as multidimensional array must have bounds for all dimensions except the first
void carica(int m[][], int &r, int &c);
^
C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:5:22: error: expected ')' before ',' token
void carica(int m[][], int &r, int &c);
^
C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:5:24: error: expected unqualified-id before 'int'
void carica(int m[][], int &r, int &c);
^
C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:6:21: error: declaration of 'm' as multidimensional array must have bounds for all dimensions except the first
void stampa(int m[][], int r, int c);
^
C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:6:22: error: expected ')' before ',' token
void stampa(int m[][], int r, int c);
^
C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:6:24: error: expected unqualified-id before 'int'
void stampa(int m[][], int r, int c);
^
C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:17:21: error: declaration of 'm' as multidimensional array must have bounds for all dimensions except the first
void carica(int m[][], int &r, int &c)
^
C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:17:22: error: expected ')' before ',' token
void carica(int m[][], int &r, int &c)
^
C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:17:24: error: expected unqualified-id before 'int'
void carica(int m[][], int &r, int &c)
^
mingw32-make.exe[1]: *** [Debug/main.cpp.o] Error 1
filenome.mk:93: recipe for target 'Debug/main.cpp.o' failed
mingw32-make.exe[1]: Leaving directory 'C:/Users/Desktop/Gabriele/LinguaggioC/filenome'
mingw32-make.exe: *** [All] Error 2
Makefile:4: recipe for target 'All' failed
10 errors, 0 warnings


potete gentilmente aiutarmi?

12 Risposte

  • Re: Matrici in c++

    gaab ha scritto:


    error: declaration of 'm' as multidimensional array must have bounds for all dimensions except the first
    void carica(int m[][], int &r, int &c);
    ^
    Questo dice già parecchio: quando passi un array multidimensionale, una delle dimensioni può essere omessa, ma le altre vanno specificate. Se invece vuoi essere completamente "libero" allora puoi passare un puntatore doppio, quindi
    Tipo nome_funzione (int** matrice, ...)
  • Re: Matrici in c++

    C:\Windows\system32\cmd.exe /C "C:/TDM-GCC-64/bin/mingw32-make.exe -j4 SHELL=cmd.exe -e -f Makefile"
    "----------Building project:[ filenome - Debug ]----------"
    mingw32-make.exe[1]: Entering directory 'C:/Users/Desktop/Gabriele/LinguaggioC/filenome'
    mingw32-make.exe[1]: Leaving directory 'C:/Users/Desktop/Gabriele/LinguaggioC/filenome'
    mingw32-make.exe[1]: Entering directory 'C:/Users/Desktop/Gabriele/LinguaggioC/filenome'
    C:/TDM-GCC-64/bin/g++.exe -c "C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp" -g -O0 -Wall -o ./Debug/main.cpp.o -I. -I.
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp: In function 'int main(int, char**)':
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:11:14: error: cannot convert 'int (*)[40]' to 'int**' for argument '1' to 'void carica(int**, int&, int&)'
    carica(m,r,c);
    ^
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:12:17: error: cannot convert 'int (*)[40]' to 'int**' for argument '1' to 'void stampa(int**, int, int)'
    stampa(m,r,c);
    ^
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp: In lambda function:
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:28:21: error: expected '{' before '[' token
    cin>>[j];
    ^
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp: In function 'void carica(int**, int&, int&)':
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:28:21: warning: lambda expressions only available with -std=c++11 or -std=gnu++11
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:28:21: error: no match for 'operator[]' (operand types are 'carica(int**, int&, int&)::<lambda()>' and 'int')
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp: In lambda function:
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:41:22: error: expected '{' before '[' token
    cout<<[j]<<" ";
    ^
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp: In function 'void stampa(int**, int, int)':
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:41:22: warning: lambda expressions only available with -std=c++11 or -std=gnu++11
    C:/Users/Desktop/Gabriele/LinguaggioC/filenome/main.cpp:41:22: error: no match for 'operator[]' (operand types are 'stampa(int**, int, int)::<lambda()>' and 'int')
    mingw32-make.exe[1]: *** [Debug/main.cpp.o] Error 1
    mingw32-make.exe: *** [All] Error 2
    filenome.mk:93: recipe for target 'Debug/main.cpp.o' failed
    mingw32-make.exe[1]: Leaving directory 'C:/Users/Desktop/Gabriele/LinguaggioC/filenome'
    Makefile:4: recipe for target 'All' failed
    7 errors, 2 warnings

  • Re: Matrici in c++

    Non te l'ho detto perché credevo che lo sapessi... Devi cambiare anche il modo in cui allochi la matrice: non più allocazione statica ma dinamica, quindi con la malloc.
  • Re: Matrici in c++

    Più semplicemente, per ora, utilizza semplicemente la dichiarazione

    #define N 40

    void stampa(int m[N][N], int r, int c);
  • Re: Matrici in c++

    oregon ha scritto:


    ... per ora ...
    Sì in effetti per il momento quella è sufficiente. Per il momento!
  • Re: Matrici in c++

    Ok! problema matrice risolto! Ora mi da solo problemi su due cin e un cout , mi segnala 5 errori e 2 warnings!
    faccio il terzo superiore e ho studiato l'allocazione statica e dinamica potresti spiegarmi meglio quella cosa che hai detto sul modalità con cui bisogna allocare la matrice?
  • Re: Matrici in c++

    Questo è un altro problema e devi aprire un nuovo thread, con il codice, gli errori e tutto quello che serve.
  • Re: Matrici in c++

    gaab ha scritto:


    potresti spiegarmi meglio quella cosa che hai detto sul modalità con cui bisogna allocare la matrice?
    Ho buttato giù un piccolo esempio:
    
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    
    void stampa_matrice(int** matrice, int righe, int colonne)
    {
    	for(int i = 0; i < righe; ++i) {
    		for(int j = 0; j < colonne; ++j) {
    			std::cout << matrice[i][j] << " ";
    		}
    		std::cout << std::endl;
    	}
    }
    
    
    int main(int argc, char const *argv[])
    {
    	// inizializzazione del generatore di numeri casuali
    	srand(time(NULL));
    
    	int righe;
    	int colonne;
    	std::cout << "Inserire il numero di righe: ";
    	std::cin >> righe;
    	std::cout << "Inserire il numero di colonne: ";
    	std::cin >> colonne;
    
    	// allocazione della matrice
    	int** matrice = new int*[righe];
    	for(int i = 0; i < righe; ++i) {
    		// alloco le singole righe. Dopotutto
    		// una matrice è un array di array!
    		matrice[i] = new int[colonne];
    	}
    
    	// riempimento della matrice con
    	// numeri casuali
    	for(int i = 0; i < righe; ++i) {
    		for(int j = 0; j < colonne; ++j) {
    			matrice[i][j] = rand() % 100;
    		}
    	}
    
    	stampa_matrice(matrice, righe, colonne);
    
    	return 0;
    }
    
    
  • Re: Matrici in c++

    gaab ha scritto:


    ok! problema matrice risolto! Ora mi da solo problemi su due cin e un cout , mi segnala 5 errori e 2 warnings!
    faccio il terzo superiore e ho studiato l'allocazione statica e dinamica potresti spiegarmi meglio quella cosa che hai detto sul modalità con cui bisogna allocare la matrice?

    beato te che stai a fa gia quelle cose, noi stiamo ancora ai record nel 3^ anno
  • Re: Matrici in c++

    Noi i record ancora li dobbiamo fare come classe ..io li ho già imparati per conto mio! Tanto meglio!
  • Re: Matrici in c++

    gaab ha scritto:


    Noi i record ancora li dobbiamo fare come classe ..io li ho già imparati per conto mio! Tanto meglio!
    Vabbe pero ci sono alcune cose che noi ancora dobbiamo fare, voi almeno fate le cose e le fate bene, noi saltiamo argomenti su argomenti, fattosta che io non so manco come si fa l allocazione dinamica...
  • Re: Matrici in c++

    Ahahaha noi che facciamo le cose bene ahahah lasciamo perdere va... Grazie a tutti per i chiarimenti! Se ne avete altri sono ben accetti!!
Devi accedere o registrarti per scrivere nel forum
12 risposte