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

    [C]Elementi positivi di una matrice

    Ciao,
    devo fare un programma che, inserita una matrice RxC, dica all'utente quale riga contiene più elementi positivi.
    Il problema è che se inserisco il numero di righe maggiore di 1 mi dice sempre che il maggior numero di elementi si trova nella riga 2.
    codice:
    #include<stdio.h>
    int main()
    {
      int righe, colonne, tot1=0, tot2=0, x, y;
      float mat[100][100];
      printf("Inserisci il numero di righe della matrice:");
      scanf("%d", &righe);
      printf("Inserisci il numero di colonne della matrice:");
      scanf("%d", &colonne);
      for(y=0;y<righe;y++)
      {
          for(x=0;x<colonne;x++)
          {
             printf("Inserisci il valore della matrice in posizione [%d] [%d]:  ", x+1, y+1);
             scanf("%f", &mat[x][y]);
          }
      }
      printf("\nLa riga con piu\' elementi positivi e\': %d\n", pos(mat, righe, colonne, tot1, tot2));
      system("pause");
      return 0;
    }
    //Implementazione della fuzione
    int pos(float matrice[][200], int r, int c, int totale1, int totale2)
    {
        int pos=0, k=0, x, y;//Serve per indicare la riga con più elementi positivi
                             //k fa da contatore
        for(y=0;y<r;y++)
        {
          for(x=0;x<c;x++)
          {
             if(matrice[x][y]>0)
               totale2++;
          }//Chiusura for delle x
          if(k==0)
          {
            totale1=totale2;
            pos=y+1;
          }
          else
          {
              if(totale1<=totale2)
              {
                 totale1=totale2;
                 pos=y+1;
              }
          }//Chiusura else
          k++;
        }//Chiusura for delle y
        return pos;
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    1) i parametri totale1 e totale2 non hanno senso; eliminali e usa delle variabili locali nella funzione pos

    codice:
    int pos(float matrice[][200], int r, int c)
    {
       int totale1, totale2;
    2) la variabile totale2 deve essere azzerata prima del secondo ciclo nella funzione pos

    codice:
    totale2=0;
    for(x=0;x<c;x++)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao, prova a guardare questo: ho semplificato un po' il codice ma soprattutto ho inserito le funzioni prima del main mentre tu le avevi messe dopo e non avevi dichiarato i prototipi.

    codice:
    #include<stdio.h>
    
    //Implementazione della fuzione
    int pos(float matrice[][100], int r, int c)
    {
        int count=0, riga=0, max=0, y, x;
        for(y=0; y<r; y++)
        {
            count=0;
            for(x=0; x<c; x++)
            {
                if(matrice[y][x]>0)
                    count++;
            }//Chiusura for delle x
            if(count > max)
            {
                max = count;
                riga = y;
            }
        }
        return riga;
    }
    
    void stampaMat(float mat[][100], int r, int c)
    {
        int x=0, y=0;
        for(y=0; y<r; y++)
        {
            for(x=0; x<c; x++)
            {
                printf("%g   ", mat[y][x]);
            }
            printf("\n");
        }
    }
    
    int main()
    {
        int righe, colonne, x, y;
        float mat[100][100];
        printf("Inserisci il numero di righe della matrice:");
        scanf("%d", &righe);
        printf("Inserisci il numero di colonne della matrice:");
        scanf("%d", &colonne);
        for(y=0; y<righe; y++)
        {
            for(x=0; x<colonne; x++)
            {
                printf("Inserisci il valore della matrice in posizione [%d] [%d]:  ", y+1, x+1);
                scanf("%f", &mat[y][x]);
            }
        }
    
        stampaMat(mat, righe, colonne);
    
        printf("\nLa riga con piu' elementi positivi e': %d\n", pos(mat, righe, colonne));
        //system("pause");
        return 0;
    }

  4. #4
    Ciao,
    ho messo insieme i vostri consigli e ora il codice funziona, volevo chiedervi però cosa dovrei fare nel caso ci siano più righe con lo stesso numero di numeri positivi.
    codice:
    #include<stdio.h>
    int main()
    {
      int righe, colonne, tot1=0, x, y;
      float mat[100][100];
      printf("Inserisci il numero di righe della matrice:");
      scanf("%d", &righe);
      printf("Inserisci il numero di colonne della matrice:");
      scanf("%d", &colonne);
      for(y=0;y<righe;y++)
      {
          for(x=0;x<colonne;x++)
          {
             printf("Inserisci il valore della matrice in posizione [%d] [%d]:  ", x+1, y+1);
             scanf("%f", &mat[x][y]);
          }
      }
      printf("\nLa riga con piu\' elementi positivi e\': %d\n", pos(mat, righe, colonne));
      system("pause");
      return 0;
    }
    //Implementazione della fuzione
    int pos(float matrice[][100], int r, int c)
    {
        int count=0, riga=0, max=0, y, x;
        for(y=0; y<r; y++)
        {
            count=0;
            for(x=0; x<c; x++)
            {
                if(matrice[y][x]>0)
                    count++;
            }//Chiusura for delle x
            if(count > max)
            {
                max = count;
                riga = y;
            }
        }
        if(max > 0)
          return riga;
        else
          return -1;
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  5. #5
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Originariamente inviato da 21Edoardo96
    volevo chiedervi però cosa dovrei fare nel caso ci siano più righe con lo stesso numero di numeri positivi.
    Beh questo dipende da quello che vuoi... se ti basta indicare la prima che incontri allora va bene così; se invece le vuoi indicare tutte allora puoi crearti un array nel quale vai a memorizzare di volta in volta l'indice della riga. Ovviamente dovresti vuotarlo nel caso incontrassi una riga con più numeri positivi di tutte quelle che hai incontrato fino a quel punto.
    Non so se sono stato molto chiaro...

  6. #6
    Ok grazie capito
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  7. #7
    Ciao,
    riprovando con dei casi particolari il codice non funzione per esempio se metto
    0 0
    4 3

    mi dice che la riga con più elementi positivi è la zero come mai?
    codice:
    #include<stdio.h>
    int main()
    {
      int righe, colonne, tot1=0, x, y;
      float mat[100][100];
      printf("Inserisci il numero di righe della matrice:");
      scanf("%d", &righe);
      printf("Inserisci il numero di colonne della matrice:");
      scanf("%d", &colonne);
      for(y=0;y<righe;y++)
      {
          for(x=0;x<colonne;x++)
          {
             printf("Inserisci il valore della matrice in posizione [%d] [%d]:  ", x+1, y+1);
             scanf("%f", &mat[x][y]);
          }
      }
      printf("\nLa riga con piu\' elementi positivi e\': %d\n", pos(mat, righe, colonne));
      system("pause");
      return 0;
    }
    //Implementazione della fuzione
    int pos(float matrice[][100], int r, int c)
    {
        int count=0, riga=0, max=0, y, x;
        for(y=0; y<r; y++)
        {
            count=0;
            for(x=0; x<c; x++)
            {
                if(matrice[x][y]>0)
                    count++;
            }//Chiusura for delle x
            if(count > max)
            {
                max = count;
                riga = y;
            }
        }
        if(max > 0)
          return riga;
        else
          return -1;
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  8. #8
    Risolto
    codice:
    #include<stdio.h>
    int main()
    {
      int righe, colonne, tot1=0, x, y;
      float mat[100][100];
      printf("Inserisci il numero di righe della matrice:");
      scanf("%d", &righe);
      printf("Inserisci il numero di colonne della matrice:");
      scanf("%d", &colonne);
      for(y=0;y<righe;y++)
      {
          for(x=0;x<colonne;x++)
          {
             printf("Inserisci il valore della matrice in posizione [%d] [%d]:  ", x+1, y+1);
             scanf("%f", &mat[x][y]);
          }
      }
      for(y=0;y<righe;y++)
      {
          
          printf("\n");
          for(x=0;x<colonne;x++)
              printf("%4.1f ", mat[x][y]);
      }
      printf("\nLa riga con piu\' elementi positivi e\': %d\n", pos(mat, righe, colonne));
      system("pause");
      return 0;
    }
    //Implementazione della fuzione
    int pos(float matrice[][100], int r, int c)
    {
        int count=0, riga=0, max=0, y, x;
        for(y=0; y<r; y++)
        {
            count=0;
            for(x=0; x<c; x++)
            {
                if(matrice[x][y]>0)
                    count++;
            }//Chiusura for delle x
            if(count > max)
            {
                max=count;
                riga=y+1;//perchè l'utente li visualizza a partire da 1
            }
        }
        if(max > 0)
          return riga;
        else
          return -1;
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  9. #9
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Qui risponde 1...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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 © 2024 vBulletin Solutions, Inc. All rights reserved.