Programma linguaggio C

Messaggioda gaetano0 » 18/08/2017, 17:34

Salve ragazzi,
un esercizio mi richiede di trovare,in una matrice di caratteri,di trovare una parola inserita da utente e dire se tale parola si trova in orizzontale,verticale,o in obliquo.

Qualche suggerimento ?
gaetano0
Junior Member
Junior Member
 
Messaggio: 29 di 122
Iscritto il: 07/01/2017, 20:00

Re: Programma linguaggio C

Messaggioda xneo » 18/08/2017, 19:39

Se conosci ciclo for e puntatori sei a cavallo.
xneo
Junior Member
Junior Member
 
Messaggio: 83 di 186
Iscritto il: 24/04/2014, 11:15

Re: Programma linguaggio C

Messaggioda gaetano0 » 18/08/2017, 21:58

xneo ha scritto:Se conosci ciclo for e puntatori sei a cavallo.

un piccolo input? sono alle prime armi e ho un pò di difficoltà
gaetano0
Junior Member
Junior Member
 
Messaggio: 30 di 122
Iscritto il: 07/01/2017, 20:00

Re: Programma linguaggio C

Messaggioda xneo » 18/08/2017, 22:19

E' un esercizio talmente banale che il piccolo input sarebbe scriverti la soluzione.
Sai come scandire una matrice per righe, per colonne e in obliquo (indendi diagonale principale e secondaria? o andare a scandire in obliquo anche i triangoli?)?
Se no, impara (Google ti darà una mano ;) )
Se si, l'esercizio sta tutto nel capire se una stringa è contenuta in un array di caratteri.
xneo
Junior Member
Junior Member
 
Messaggio: 84 di 186
Iscritto il: 24/04/2014, 11:15

Re: Programma linguaggio C

Messaggioda gaetano0 » 18/08/2017, 22:21

xneo ha scritto:E' un esercizio talmente banale che il piccolo input sarebbe scriverti la soluzione.
Sai come scandire una matrice per righe, per colonne e in obliquo (indendi diagonale principale e secondaria? o andare a scandire in obliquo anche i triangoli?)?
Se no, impara (Google ti darà una mano ;) )
Se si, l'esercizio sta tutto nel capire se una stringa è contenuta in un array di caratteri.


no,intendo proprio scandire tutti gli elementi della matrice,quello che non capisco è come far capire al programma che la parola sia orizzontale,verticale,o in obliquo...e i triangoli non ne ho idea di come si faccia...
gaetano0
Junior Member
Junior Member
 
Messaggio: 31 di 122
Iscritto il: 07/01/2017, 20:00

Re: Programma linguaggio C

Messaggioda xneo » 18/08/2017, 22:55

Ripeto, sai scandire una matrice per righe? Se si, a questo punto se la sequenza di caratteri che forma la riga (e quella nell'ordine inverso, cioè da destra verso sinistra) è uguale alla stringa data, significa che la stringa è contenuta in orizzontale.
Sai scandire la stringa per colonne? Se si, se la sequenza di caratteri che forma la colonna ( e quella nell'ordine inverso, cioè dal basso verso l'alto) è uguale alla stringa data, significa che la stringa è contenuta in verticale.
Per semplificare, supponiamo che per obliquo si intendano solo le diagonali, il ragionamento è lo stesso.

Se alle domande ti rispondi in modo negativo, allora cerca su Google -> matrici in C.
xneo
Junior Member
Junior Member
 
Messaggio: 85 di 186
Iscritto il: 24/04/2014, 11:15

Re: Programma linguaggio C

Messaggioda vict85 » 19/08/2017, 09:55

@xneo : professionalmente parlando, nessuno implementa le matrici in C come suggerito dalla maggior parte dei professori. I loro esercizi sulle matrici sono più fatti per esercitare gli studenti sull'allocazione dinamica che reali consigli su come si allocano matrici in ambiente professionale. In genere una matrici si alloca come un unico array \(M\times N\) dimensionale e accedendo agli elementi come \(A_{i,j} = A[ i\times N + j ]\).

@gaetano0: Il tuo esercizio non è diverso da quello di cercare una parola in un array. Semplicemente la direzione della seconda parola non è definita a priori. Prova ad implementare il primo e poi generalizza. Insomma viene implementato in maniera abbastanza brute force.
vict85
Moderatore
Moderatore
 
Messaggio: 9125 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: Programma linguaggio C

Messaggioda xneo » 19/08/2017, 10:58

@vict85 Credo che l'utente sia ancora in una fase "didattica" (mi sembra un classico esercizio sulle matrici per usare i due for innestati). Non mi sembra opportuno complicargli ancora di più le cose.
xneo
Junior Member
Junior Member
 
Messaggio: 86 di 186
Iscritto il: 24/04/2014, 11:15

Re: Programma linguaggio C

Messaggioda apatriarca » 19/08/2017, 12:21

Mi sembra abbastanza chiaro che @gaetano0 non ha ancora abbastanza dimestichezza con le matrici o con i cicli for da svolgere l'esercizio senza suggerimenti più chiari. Suppongo che con matrice bidimensionale di caratteri tu intenda qualcosa dichiarato come segue:
Codice:
char matrice[N][N];


La struttura generale del programma sarà qualcosa come segue:
1. Inizializzazione matrice (non ho idea se sia costante o se va inserita dall'utente o altro)
2. Lettura della parola dall'utente
3. Ricerca della parola in orizzontale su ogni riga. Dovrai fare insomma un ciclo per ogni riga e cercare la parola in quella riga con due cicli for annidati. Se trovi la parola allora puoi comunicare all'utente che si trova in orizzontale e uscire dal programma.
4. Ricerca della parola in verticale su ogni colonna. Devi insomma fare un ciclo per ogni colonna e cercare la parola in quella colonna con due cicli annidati. Se trovi la parola allora puoi comunicare all'utente che si trova in verticale e uscire dal programma.
5. Ricerca della parola in diagonale. In questo caso è un po' più complicato ma comunque simile ai precedenti. Una volta risolti i punti 3 e 4 possiamo passare a questo punto.

Per i punti 3 e 4 è sufficiente osservare che una riga è costituita dagli elementi della matrice con il primo indice fissato e una colonna è costituita dagli elementi della matrice con il secondo indice fissato. Se \(i\) rappresenta il primo indice e \(j\) il secondo avremo quindi qualcosa come segue:
Codice:
// Orizzontale
for (i = 0; i < N; ++i) { /* ciclo per ogni riga */
    /* ricerca della parola in matrice[i][*] dove l'asterisco indica l'indice che
        andrà modificato nel ciclo interno che ho omesso */
}

// Verticale
for (j = 0; j < N; ++j) { /* ciclo per ogni colonna */
    /* ricerca della parola in matrice[*][j] dove l'asterisco indica l'indice che
        andrà modificato nel ciclo interno che ho omesso */
}
apatriarca
Moderatore
Moderatore
 
Messaggio: 4758 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Programma linguaggio C

Messaggioda gaetano0 » 19/08/2017, 16:17

ma io pensavo di fare un ciclo di questo tipo

for(i=0;i<cont1;i++)
{
for(j=0;j<M;i++)
if(s1[i]==MAT[i][j])
printf(" la parola è orizzontale");
}

for(j=0;j<M;j++){
for(i=0;i<cont1;i++)
if(s1[j]==MAT[i][j])
printf("la parola e' verticale");



dove s1 è la stringa inserita da utente ma il programma va in loop
gaetano0
Junior Member
Junior Member
 
Messaggio: 32 di 122
Iscritto il: 07/01/2017, 20:00

Prossimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite