IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

di il
32 risposte

IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

Include <iostream>
using namespace std;
int main (void)
{
char opzione;



cout << "MENU'" << endl;
cout <<"a) costruisci la matrice quadrata" << endl;
cout<< "b) calcola la somma di ogni colonna della matrice"<< endl;
cout << "c) calcola la somma di ogni riga della matrice" << endl;
cout << "d) calcola la somma delle diagonali destre della matrice"<< endl;
cout << "e) salva il vettore dell'ultima somma effettuata" << endl;
cout << "f) Esci" << endl;
cin >> opzione;


int d;
int rest = 0;
rest = d % 2;
int M[d][d];
int riga, col;
switch (opzione)
{ case 'a':

cout << " scegli la dimensione della matrice quadrata (max 10):";
cin >> d;
if (( d >= 2) && ( d<= 10))
cout << d;
else cout << "errore" << endl;

cout << "inserisci gli elementi della matrice :";
for ( riga=0; riga <= d; riga++){
for ( col = 0; col <= d; col++){
cin >> M [riga] [col];}}
break;

case 'b':
int Somma(int M[], int d);
int somma = 0;
for ( col = 0; col <= d ; col++){
for ( riga = 0; col <= d; riga++){
somma += M [d][d];
return somma; }}

cout << somma << endl;
break;
}}
praticamente quando faccio run si apre il programma e il menù ma poi quando premo su a e faccio invio mi fa errore,come devo fare

32 Risposte

  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Mi sembra che tu sia alle prime armi...perchè hai la classica confusione tipica di chi incomincia a programmare per la prima volta (a liceo o all'università)...comunque sta tranquilla perchè ci siamo passati tutti...sbagliando si impara...

    Innanzi tutto sposta questo pezzo:
    
    int d;
    int rest = 0;
    int M[d][d];
    int riga, col;
    rest = d % 2;
    
    e questo:
    
    int somma=0;
    
    subito dopo "char opzione"...le dichiarazioni vanno fatte tutte e sempre all'inizio...

    inoltre non capisco proprio cosa tu voglia fare nel caso b...forse mi sbaglio ma ho l'impressione che tu voglia dichiarare e sviluppare la funzione "Somma" tutta all'interno del main...se così fosse correggilo subito perchè, con tutto il rispetto, è un errore troppo grosso...
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Ho corretto come dici tu, ma comunque non parte , come mi suggerisci di scrivere la somma? comunque in effetti è tipo una settimana che ho iniziato a programmare qualcosa
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Cosa significa non parte?
    Se vuoi scrivere una funzione lo devi scrivere fuori del main e in generale fuori da una funzione qualsiasi quindi:
    
    int Somma(int M[][], int d)
    {
         int somma = 0;
          for ( col = 0; col < d ; col++)
          {
                   for ( riga = 0; col < d; riga++)
                   {
                       somma += M [col][riga];
                   }
          }
          return somma; 
    }
    
    Questa è la funzione Somma che ritorna un int. Come vedi la somma lo devi fare aggiungendo i valori di col e riga che variano di volta in volta (tu faccevi solo la somma di un valore d mai raggiungibile). Questa funzione va piazzata sopra il main così il compilatore non banfa, oppure metti solo la dichiarazione della funzione sopra il main e lo sviluppo sotto.
    
    //dichiarazione
    int Somma(int M[][], int d);
    //main
    int main(void)
    {
    ......
    }
    //sviluppo
    int Somma(int M[][], int d)
    {
    ......
    }
    
    Dire che non parte o non va non ci aiuta. Devi dire che errore da e soppratutto cosa non capisci di quell'errore solo così puoi imparare dai tuoi errori.
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Ho riscritto il programma in questo modo, dovrebbe essere corretto, però mi dà errore sulla scritta somma_colonna(d, M, v)

    #include <iostream>
    using namespace std;
    char r;
    int M[10][10];
    int vet[10][10];
    int d;

    void leggi_matrice(int d, int M[][10]){
    cout<<" inserisci i valori della matrice";
    for ( int i = 0; i <= d; i++){
    for (int j = 0; j <= d; j++){
    cout << "M["<< i <<"]["<< j <<"]=";
    cin >> M [j];}}}

    void somma_colonna(int d, int M[][10], int v[]){
    int somma = 0;
    for ( int i = 0; i <= d ; i++){
    for ( int j = 0; j <= d; j++){
    somma += M [j];
    v = somma;
    somma = 0;}}}

    int main(void)
    {
    int opzione;
    cout << "MENU'" << endl;
    cout << " Scegliere una lettera corrispondente all'operazione da svolgere :" << endl;
    cout <<"a) costruisci la matrice quadrata" << endl;
    cout<< "b) calcola la somma di ogni colonna della matrice :" << endl;
    cin >> opzione;

    switch(opzione)
    {

    case 'a':
    cout << " scegli la dimensione della matrice quadrata (max 10):";
    cin >> d;
    if (( d >= 2) && ( d<= 10))
    cout << d;
    else cout << "errore" << endl;

    cout << "inserisci gli elementi della matrice :";
    leggi_matrice(d, M);
    break;

    case 'b':
    cout << " questa opzione somma i valori delle colonne";
    somma_colonna(d, M, v);
    break;}}
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    
    int d;
    int M[d][d];
    
    quest altro è un altro errore. Il compilatore ti può dire che non può allora spazio di una matrice a dimensioni ignoti (d non è stato inzializzato). quindi soluzione:
    
    const int d = 10;
    int M[d][d];
    
    ora non da + errore perche d è definito. Ma qui sorge un altro problema. Tu d lo scegli in run-time (a programma avviato) quindi il metodo migliore sarebbe quello di creare la matrice dopo aver saputo la dimensione di d. Ma quì forse andiamo sull'avanzato. iniziamo a risolvere i problemi prima poi espandiamo lo sviluppo.
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Di nuovo da errore non aiuta. Leggi cos'è sto errore.
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Ma M [d][d] l'avevo già sostituito, ho pubblicato 2 minuti fa il programma come l'ho corretto, ora il problema è somma_colonna che mi dà errore
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Mi dà errore con dev C++,mi compare la crocetta su somma_colonna quando vado su compile
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Leggi sotto nel report del compilatore. ti dira qualcosa tipo: v is not defined oppure uncleared identifier v. Ed ecco la spiegazione.
    
    int M[10][10];
    int vet[10][10];
    int d;
    ....
    case 'b':
    cout << " questa opzione somma i valori delle colonne";
    somma_colonna(d, M, v); //d è definito, M pure ma v cos'è? 
    break;
    
    secondo te dov'è sta l'errore?
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    L'ho definito, adesso ho scritto così:
    int M[10][10];
    int v[10][10];
    int d;
    quindi il vettore v adesso è definito, ma continua a darmi lo stesso errore
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Devi imparare a leggere gli errori se no non vai avanti. Sto compilando il programma x te ed ecco il prossimo errore:
    
    //dichiarazione di v
    int v[10][10];
    //dichiarazione di somma_colonna
    void somma_colonna(int d, int M[][10], int v[])
    //uso di v in somma_colonna
    somma_colonna(d, M, v);
    
    spiegazione:
    somma_colonna aspetta un int, una matrice, e un vettore tu invece hai: un int, una matrica e una altra matrice.
    L'errore che ti compare è:
    somma_colonna' : cannot convert parameter 3 from 'int [10][10]' to 'int []
    non posso convertire da matrice a vettore quindi credo che sia chiaro.
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    #include <iostream>
    using namespace std;
    char r;
    int M[10][10];
    int v[10];
    int d = 10;
    int a;
    int b;

    void leggi_matrice(int d, int M[][10]){
    cout<<" inserisci i valori della matrice";
    for ( int i = 0; i <= d; i++){
    for (int j = 0; j <= d; j++){
    cout << "M["<< i <<"]["<< j <<"]=";
    cin >> M [j];}}}

    void somma_colonna(int d, int M[][10]){
    int somma = 0;
    for ( int i = 0; i <= d ; i++){
    for ( int j = 0; j <= d; j++){
    somma += M [j];
    v = somma;
    somma = 0;}}}

    int main(void)
    {
    int opzione;
    cout << "MENU'" << endl;
    cout << " Scegliere una lettera corrispondente all'operazione da svolgere :" << endl;
    cout <<"a) costruisci la matrice quadrata" << endl;
    cout<< "b) calcola la somma di ogni colonna della matrice :" << endl;
    cin >> opzione;

    switch(opzione)
    {

    case 'a':
    cout << " scegli la dimensione della matrice quadrata (max 10):";
    cin >> d;
    if (( d >= 2) && ( d<= 10))
    cout << d;
    else cout << "errore" << endl;

    cout << "inserisci gli elementi della matrice :";
    leggi_matrice(d, M);
    break;

    case 'b':
    cout << " questa opzione somma i valori delle colonne";
    somma_colonna(d, M);
    break;}}
    l'ho corretto così, adesso v è un vettore, il problema è che adesso il programma si apre e compare il menù, ma quando premo su a per costruire la matrice si chiude il progrmma, se fate copia e incolla su dev c++ lo potete vedere
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Impara ad usare il debug. Se non sai usare i programmi come pretendi di fare un programma. Definisci opzione come carattere quindi
    
    char opzione;
    
    e vedrai che funziona. Hai ancora altri problemi ma pian piano li risolviamo.
  • Re: IL PROGRAMMA NON MI Dà ERRORE MA POI MI COMPARE LA SCHERMATA

    Non parte, solita cosa, premo su a e poi il programma si stoppa
Devi accedere o registrarti per scrivere nel forum
32 risposte