Pagina 1 di 2

[RISOLTO]: Matrice di Caratteri

Inviato: venerdì 8 giugno 2007, 17:21
da winbusters
Ciao a tutti vorrei sapere ho questo programma da fare:
Scrivere un programma C in grado di:
        – Caricare da tastiera una matrice di caratteri con N righe ed M colonne
        – Stampare a video la matrice inserita
        – Stampare a video l’elemento minimo di ogni riga della matrice

solo che non ho idea di come dichiarare ed acquisire le lettere in questa matrice..cioè ho solo delle idee

si può dichiarare così

Codice: Seleziona tutto

char matrice[n][m];
e poi per acquisire
vabbè inanzitutto prendo in input n e m(e vabbè che ci vuole!! ;D)
e poi con due cicli

Codice: Seleziona tutto

for(i=0;i<n;i++)
 {
      for(j=0;j<m;j++)
         {
                printf("Inserire una lettera\n")
                scanf("%c",vettore[n] [m]);
           }
 }
ho letto su un libro che ho trovato in rete con le matrici si può anche evitare di fare doppio ciclo e farne uno solo

Codice: Seleziona tutto

for(i=0;i<n*m;i++)
stanco di tentavi inutili mi rivolgo a voi  ::)

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 17:26
da difesaparcosempione
Non ti preoccupare eri partito bene !!
Va benissimo per iniziare quello che hai detto, continua per la strada dei 2 for annidati ...

ciao
8)

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 17:52
da winbusters

Codice: Seleziona tutto

#include <stdio.h>

int main()
{
	int n=0;
	int m=0;
	char vettore[n][m];
	int i;
	int j;
	
	   printf("*****MATRICE DI CARATTERI******\n");
	   printf("Inserire il numero di:\nRIGHE:\n\n ");
	   scanf("%d",&n);
	   printf("Inserire il numero di:\nCOLONNE:\n\n ");
	   scanf("%d",&m);

	for(i=0;i<n;i++)
     {
       for(j=0;j<m;j++)
         {
             printf("Inserire una lettera\n");
             scanf("%c",&vettore[n] [m]);
         }
     }
    
non funziona :( è strano quando eseguo il programma mi sdoppia inserire una lettera e me ne fa inserire la metà

Codice: Seleziona tutto

*****MATRICE DI CARATTERI******
Inserire il numero di:
RIGHE:

 3
Inserire il numero di:
COLONNE:

 2
Inserire una lettera
Inserire una lettera
a
Inserire una lettera
Inserire una lettera
b
Inserire una lettera
Inserire una lettera
c

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 17:59
da difesaparcosempione
soliti problemi che si incontrano usando, alle prime armi, la scanf ..
ti consiglio una ricerca per scanf in questa sezione e vedrai...

ciao
;D

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 18:03
da thelo
in realtà c'è un errore di allocazione di memoria
tu allochi un array di dimensioni nulle...e poi inizializzi le variabili m e n
invece devi dichiarare:

Codice: Seleziona tutto

char *vettore;
m = x;
n = y;
vettore = (char *)calloc(m*n, sizeof(char));
prova così...
probabilmente la scanf leggeva più di un carattere per volta

Saluti
(b2b)

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 18:11
da 7cys7
ubuntu6 ha scritto:

Codice: Seleziona tutto

#include <stdio.h>

int main()
{
	int n=0;
	int m=0;
	char vettore[n][m];
	int i;
	int j;
	
	   printf("*****MATRICE DI CARATTERI******\n");
	   printf("Inserire il numero di:\nRIGHE:\n\n ");
	   scanf("%d",&n);
	   printf("Inserire il numero di:\nCOLONNE:\n\n ");
	   scanf("%d",&m);

	for(i=0;i<n;i++)
     {
       for(j=0;j<m;j++)
         {
             printf("Inserire una lettera\n");
             scanf("%c",&vettore[n] [m]);
         }
     }
    
non funziona :( è strano quando eseguo il programma mi sdoppia inserire una lettera e me ne fa inserire la metà
Mi sembra ci sia un errore anche qui:

Codice: Seleziona tutto

scanf("%c",&vettore[n] [m]);// non dovrebbe essere &vettore[i][j]?

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 18:17
da winbusters
thelo ha scritto: in realtà c'è un errore di allocazione di memoria
tu allochi un array di dimensioni nulle...e poi inizializzi le variabili m e n
invece devi dichiarare:

Codice: Seleziona tutto

char *vettore;
m = x;
n = y;
vettore = (char *)calloc(m*n, sizeof(char));
prova così...
probabilmente la scanf leggeva più di un carattere per volta

Saluti
(b2b)
mi spieghi vettore=...non capisco cosa fa di preciso

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 18:23
da winbusters
cmq il problema che continuo insesorabilmente ad incontrare è quello che prende solo metà dei valori!!!se ne metto più di uno me ne chiede uno in meno quindi stiamo là

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 18:55
da thelo
la funzione calloc alloca dinamicamente un vettore(in questo caso la dimensione è m * n e il tipo è char) e ne restituisce un puntatore.
hai corretto anche l'errore citato da 7cys7?

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 19:12
da winbusters
si anche quello era sbagliato  >:( uff sta matrice..

ma permane quell'errore che mi ha spinto ad aprire il post....
provare per credere  :(
ubuntu6 ha scritto: cmq il problema che continuo insesorabilmente ad incontrare è quello che prende solo metà dei valori!!!se ne metto più di uno me ne chiede uno in meno quindi stiamo là


Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 19:55
da 7cys7
Inserisci:

Codice: Seleziona tutto

getchar();
dopo lo scanf...
Vedrai che funge.
;)

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 20:22
da winbusters
apparentemente è risolto..ma in realtà no..cioè non acquisisce nulla boh!riposto il codice

Codice: Seleziona tutto

#include <stdio.h>
#define MAXSIZE 20
int main()
{
	char vettore[MAXSIZE][MAXSIZE];
	int n=0;
	int m=0;
	int i;
	int j;
	
	
	   printf("*****MATRICE DI CARATTERI******\n");
	   printf("Inserire il numero di:\nRIGHE:\n\n ");
	   scanf("%d",&n);
	   printf("Inserire il numero di:\nCOLONNE:\n\n ");
	   scanf("%d",&m);
    
    
	for(i=0;i<n;i++)
     
       for(j=0;j<m;j++)
         {
             printf("Inserire una lettera\n");
             scanf("%c",&vettore[i][j]);
             getchar();
         }
     
    
    for(i=0;i<n;i++)
     {
     	printf("\n");
     	
       for(j=0;j<m;j++)
         {
             printf("%c", vettore[i][j]);
             
         }
     }  






return 0;
}

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 20:26
da 7cys7

Codice: Seleziona tutto

#include <stdio.h>

int main()
{
	int n=0;
	int m=0;
	int i;
	int j;
	printf("*****MATRICE DI CARATTERI******\n");
        printf("Inserire il numero di: RIGHE: ");
   	scanf("%d",&n);
	getchar();
	printf("Inserire il numero di: COLONNE: ");	
	scanf("%d",&m);
	getchar();
	char vettore[n][m];
	for(i=0;i<n;i++){
		for(j=0;j<m;j++)
		{	printf("Inserisci il carattere: ");									
		       	scanf("%c",&vettore[i][j]);
			getchar();
		}
	}
	for(i=0;i<n;i++){
		printf("\n");
		for(j=0;j<m;j++)
		{
			printf("%c ", vettore[i][j]); 
		}
	}
	printf("\n");
return 0;
}
Per questi problemi conviene fare un giro su un qualsiasi motore di ricerca.
(b2b)

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 20:42
da winbusters
ma scusa le scanf perchè non funzionano da sole?

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 20:46
da winbusters
7cys7 ha scritto:
Per questi problemi conviene fare un giro su un qualsiasi motore di ricerca.
(b2b)
cmq questo forum si chiama programmazione?
non ho trovato nulla in rete..voglio una soluzione immediata perchè non postare qui invece di impazzire?

cmq grazie mille  (good)

ma spiegami perchè non funzionano da sole le scanf

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 21:01
da 7cys7
Non per far polemica, ma sarebbe meglio se fossi meno esigente (voglio) e più propositivo (vorrei)...
Comunque, se non pulisci il buffer, ogni volta che premi invio per acquisire un carattere il \n rimane e verrà letto dopo.
Magari mi sbaglio, vediamo se qualcuno mi smentisce.
::)  :-\  :(

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 21:13
da winbusters
hey spero di non esser sembrato scortese..se si scusami non volevo  ;)
sai quel codice mi ha fatto impazzire per una mattinata

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 21:51
da thelo
guarda che da me il codice funziona alla perfezione

Re: Problema con una matrice

Inviato: venerdì 8 giugno 2007, 22:49
da winbusters
lo so e infatti ho ringraziato!  (good) però vorrei sapere perchè si usa getchar..non basta scanf?

Re: Problema con una matrice

Inviato: sabato 9 giugno 2007, 0:52
da thelo
hai ragione  :-\ per sbaglio ho compilato il codice con le getchar...
sai che hanno fatto impazzire anche me?
ricordo il prof di programmazione che alle prime lezioni spiegava questo tipo di problemi...ma non ricordo bene.
Ho provato a scrivere scanf("%c\n")
e funziona quasi bene...nel senso che stampa la tabella con lo sfasamento di un numero...
prova e vedi