Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [c] Programma matrice

  1. #1

    [c] Programma matrice

    Ciao ragazzi vi chiedo aiuto per questo esercizio che a voi risulterà banale ma non riesco a risolvere in maniera ottimale.
    il testo prevede:

    Scrivere un programma in linguaggio C che:
    • legga da tastiera le dimensioni di una matrice (m x n) (max m = 20, max n=20)
    • la riempia con valori interi positivi pseudorandom minori o uguali a 50
    • esamini la matrice, e verifichi se i numeri inseriti nella matrice, compaiono esattamente lo stesso numero di volte se ciò non accade elenchi i numeri presenti nella matrice e quante volte essi appaiono.

    Esempio (in grassetto l’input):
    3 4
    1 5 3 2
    3 14 1 2
    6 5 14 6
    Output:
    1 2 3 5 14 compaiono 2 volte nella matrice


    Io l'ho risolto così:

    codice:
    #include <stdio.h>
    
    #define MAXM 20
    #define MAXN 20
    #define MAX 50
    
    main()
    {
       int i,j,k,r,c,temp;
       int a[MAXM][MAXN];
       int conta[MAX]={0};
       
       printf("inserisci il numero di righe : ");
       scanf("%d",&r);
       
       printf("\ninserisci il numero di colonne : ");
       scanf("%d",&c);
       
       for (i=0; i<r; i++){
          for (j=0; j<c; j++){
             a[i][j]= (rand()%50)+1;
          }
       }
    
    for (i=0; i<r; i++){
          for (j=0; j<c; j++){
             printf("%3d",a[i][j]);
                if(j==(c-1))
                printf("\n");
          }
    }   
      
     for (i=0; i<r; i++){
          for (j=0; j<c; j++){
               if (a[i][j]==a[i][j+1] || a[i][j]==a[i+1][j]){             
                  temp=a[i][j];
                  conta[temp]++;
                  }
               
          }
     }
    
    for (temp=1;temp<MAX;temp++){
    if (conta[temp]>0)
    printf("%5d compare %d volte nella matrice\n",temp, (conta[temp]+1));
    }
    
     getch();
    }
    Il problema e che non considera l'ultimo ingresso della matrice

    Per spiegare meglio cosa intendo ho aggiunto uno screen del programma eseguito:


    come vedete funziona eccetto che per l'ultima entrata della matrice, ma non arrivo a capire dov'è l'errore o gli errori.
    Sono un pò :berto:


    Grazie

  2. #2
    Mi sono accorto di aver scritto una bagianata, infatti il controllo è proprio sbagliato, ma non so come eseguirlo! qualche suggerimento?

  3. #3
    Originariamente inviato da furiceka:
    esamini la matrice, e verifichi se i numeri inseriti nella matrice, compaiono esattamente lo stesso numero di volte se ciò non accade elenchi i numeri presenti nella matrice e quante volte essi appaiono.
    compaiono lo stesso numero di volte di che?
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  4. #4
    Originariamente inviato da metal_prog
    compaiono lo stesso numero di volte di che?
    cioè se ci sono entrate della matrice che compaiono 2 o più volte

  5. #5
    se non ho capito male il programma deve guardare se ci sono valori che si ripetono del corso della matrice, se è così stampa il contenuto della matrice e le corrispondenze.

    codice:
    char contatore[MAX+1];
    char stampato=0;
    
    int main()
    {
      ...
      for(i=0; i<MAXM; i++)
        for(j=0; i<MAXN; j++)
          contatore[a[i][j]]++;
      for(i=0; i<r; i++){
        for (j=0; j<c; j++)
          printf("%3d",a[i][j]);
        printf("\n");
      }
      for(i=0; i<=MAX; i++)
        if(contatore[i]>1)
        {
          printf("Il numero %i comapre %d volte\n", i, contatore[i]);
          stampato=1;
        }
      if(stampato)printf("Nessun valore compare più d'una volta\n");
      getch();
      return 0;
    }
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  6. #6
    si esatto deve contare i doppi e stamparli, ho provato a implementare la tua parte di programma ma mi da errore(crasha)

    codice:
    #include <stdio.h>
    #define MAXM 20
    #define MAXN 20
    #define MAX 50
    
    
    int main()
    {
    char contatore[MAX+1]={0};
    char stampato=0;
    int i,j,r,c,errore;
    int a[MAXM][MAXN];
        
    printf("inserisci il numero di righe : ");
       scanf("%d",&r);
       
       printf("\ninserisci il numero di colonne : ");
       scanf("%d",&c);
    
    
       for (i=0; i<r; i++){
          for (j=0; j<c; j++){
             printf("a[%d][%d] = ",i+1,j+1);
             scanf("%d",&a[i][j]);
             
          }
       }
    
    
      for(i=0; i<MAXM; i++)
        for(j=0; i<MAXN; j++)
          contatore[a[i][j]]++;
      for(i=0; i<r; i++){
        for (j=0; j<c; j++)
          printf("%3d",a[i][j]);
        printf("\n");
      }
      for(i=0; i<=MAX; i++)
        if(contatore[i]>1)
        {
          printf("Il numero %d comapre %d volte\n", i, contatore[i]);
          stampato=1;
        }
      if(stampato)printf("Nessun valore compare più d'una volta\n");
    
    getch();
    return 0;
    
    }

  7. #7
    Sono riuscito a risolvere correggendo degli errorini dovuti alla fretta nella tua parte di programma:

    codice:
    #include <stdio.h>
    #define MAXM 20
    #define MAXN 20
    #define MAX 50
    
    
    int main()
    {
    char contatore[MAX+1]={0};
    char stampato=0;
    int i,j,r,c,errore;
    int a[MAXM][MAXN];
        
    printf("inserisci il numero di righe : ");
       scanf("%d",&r);
       
       printf("\ninserisci il numero di colonne : ");
       scanf("%d",&c);
    
    
       for (i=0; i<r; i++){
          for (j=0; j<c; j++){
             printf("a[%d][%d] = ",i+1,j+1);
             scanf("%d",&a[i][j]);
             
          }
       }
    
    
      for(i=0; i<r; i++)
        for(j=0; j<c; j++)
          contatore[a[i][j]]++;
    
    
      for(i=0; i<=MAX; i++)
        if(contatore[i]>1)
        {
          printf("Il numero %d comapre %d volte\n", i, contatore[i]);
          stampato=1;
        }
      if(stampato==0)printf("Nessun valore compare più d'una volta\n");
    
    getch();
    return 0;
    
    }
    Ti ringrazio tantissimo!

    era davvero stupido come problema mi sono perso in un bicchier d'acqua!

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.