Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

Programma linguaggio C

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 ?

Re: Programma linguaggio C

18/08/2017, 19:39

Se conosci ciclo for e puntatori sei a cavallo.

Re: Programma linguaggio C

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à

Re: Programma linguaggio C

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.

Re: Programma linguaggio C

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...

Re: Programma linguaggio C

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.

Re: Programma linguaggio C

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.

Re: Programma linguaggio C

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.

Re: Programma linguaggio C

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 */
}

Re: Programma linguaggio C

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
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.