Problema

di il
7 risposte

Problema

Salve a tutti, ho un problema
allora, vorrei creare un programma (tipo estrazione tombola) che però non vada da 1 a 90 ma da 1 a 10 in una matrice 4x10 (1° riga:da 1 a 10; 2°riga: da 1 a 10.. e così via fino alla 4°riga).
Il programma deve essere in grado di eliminare dalla matrice il numero dato in input da tastiera.
Purtroppo non riesco ad andare avanti e ho alcuni errori strani tipo:
-ogni volta che inserisco un numero da eliminare, il num 10 della 3°riga si incrementa;
-non riesco a cancellare più numeri nella stessa colonna

Ecco quello che sono riuscito a fare, spero che qualuno di voi riesca a capire dove sbaglio..
grazie in anticipoooo!


#include <conio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

main()
{
char buff[30];
int mat[4][10],c,n,r;
for(r=1;r<=4;r++) //acquisizione matrice
{
for(c=1;c<=10;c++)
{

mat[r][c]=c;
}
}
//____________________________________________

for(r=1;r<=4;r++) //visualizzazione matrice
{
printf("\n");
printf("\n");

for(c=1;c<=10;c++)
{

printf("%5d",mat[r][c]);
}
}

//___________________________________________
printf("\n");

do{

printf("\n\nnumero?:");//inserimento numero ed eliminazione di esso dalla matrice
n=atoi(gets(buff));





for(r=1;r<=4;r++)
{
for(c=1;c<=10;c++)
{
if(n==mat[r][c])
{

mat[r][c]=0;


}



}

break;
}
//______________________________________________________________

//visualizzazione matrice modificata

for(r=1;r<=4;r++)
{
printf("\n");
printf("\n");

for(c=1;c<=10;c++)
{

printf("%5d",mat[r][c]);
}
}
//____________________________________________________________

}while(n!=0);
if(n==0)
exit(0);



getch();


}

7 Risposte

  • Re: Problema

    1) Il dimensionamento [4][10] comprende gli indici 0-3 e 0-9.
    2) Il break interrompe il primo for

    Usa il tag 'code' e indentatura la prossima volta.

    Saluti,
    Max
  • Re: Problema

    Ciao, grazie x avermi risposto..
    il break ho provato a toglierlo o a inserirlo diversamente, ma come risultato ottengo che mi cancella l'intera colonna del numero che ho inserito in input, mentre io voglio che ne toglie solo uno x volta..

    p.s:che cos'è il tag "code" e a che serve?


    grazieeee!
  • Re: Problema

    ziogoogle ha scritto:


    ...io voglio che ne toglie solo uno x volta..
    Se vuoi interrompere i due cicli (togliere solo il primo numero trovato nella matrice) devi fare qualcosa tipo:
    
      // --- cut ---
      int found=0;
      for(r=1;r<=4 && !found;r++)
      {
        for(c=1;c<=10 && !found;c++)
        {
          if(n==mat[r][c])
          {
            mat[r][c]=0;
            found=!found;
          }
        }
      }
    
      //   --- cut ---
    

    ziogoogle ha scritto:


    che cos'è il tag "code" e a che serve?
    Il codice deve essere formattato utilizzando l'apposito bottone 'Code'. Vedi regolamento punto 4

    Saluti,
    Max
  • Re: Problema

    Grazie 1000 sono riuscito a fare quello che volevo, però mi piacerebbe capire come hai fatto..
    non mi è molto chiara la tua soluzione, a che serve "found" e "!found"?
    scusa l'ignoranza hehe
  • Re: Problema

    Found e' un 'booleano' che può essere solo VERO o FALSO.
    Se uguale a ZERO è FALSO per altri valori è VERO.
    Mi aiuta ad uscire dalle condizioni dei cicli for.

    Un'altra soluzione al problema potrebbe essere:
    
     // --- cut ---
      int k;
      for(k=0;r<40 ;k++)
      {
        r=(k/10)+1;
        c=(k%10)+1;
        {
          if(n==mat[r][c])
          {
            mat[r][c]=0;
            break;
          }
        }
      }
     //   --- cut ---
    
    Ed ancora usando i puntatori... Tipo:
    
      //   --- cut ---
      int *ptr_ind=&mat[1][0];
      int k;
      for(k=0;k<40 ;k++,ptr_ind++)
      {
          if(n==*ptr_ind)
          {
            *ptr_ind=0;
            break;
          }
      }
      //   --- cut ---
    
    Saluti,
    Max
  • Re: Problema

    Grazie ancora! un'ultima cosa ..sapresti consigliarmi un sito o non so un libro dove poter approfondire alcuni concetti e delucidarli meglio? grazie
  • Re: Problema

    Ci sono parecchi libri in commercio. Se cerchi nel forum troverai alcuni testi consigliati.
    Io personalmente preferisco andare in libreria e sfogliarne alcuni prima di acquistare.

    Saluti,
    Max
Devi accedere o registrarti per scrivere nel forum
7 risposte