Chiarimento su matrice 2d usata come 3d per setaccaire i caratteri in ogni cella

di il
8 risposte

Chiarimento su matrice 2d usata come 3d per setaccaire i caratteri in ogni cella

Buon giorno ho ancora qualche dubbio sull'uso di matrici, che mi servono a passare un'esame di programmazione.
Volevo delle spiegazioni in merito a una soluzione diversa dalla mia (seppur anche la mia giusta) quella adoperata dal professore,
in poche parole a seconda del numero di vocali presenti in una matrice di stringhe viene inserito un valore in un arrary di dimensioni uguali a quella della matrice N*N , vi posto il codice, in poche parole per scandagliare la stringa viene aggiunta una nuova dimensione della matrice M[j]-> [k], mi chiedevo come funziona in questo caso visto che dichiariamo una matrice bidimensionale...grazie per l'aiuto

for(int i=0; i<n; i++)
    for(int j=0; j<n; j++){
      c1 = 0;
      if(S[i][j].length()>ret[0])
	count2++; // count2 is ret[2]
      for(unsigned int k=0; k<S[i][j].length(); k++)
	switch(S[i][j][k]){
	  case 'a':
	  case 'e':
	  case 'i':
	  case 'o':
	  case 'u':
	    c1++;
	    break;
	}

8 Risposte

  • Re: Chiarimento su matrice 2d usata come 3d per setaccaire i caratteri in ogni cella

    un'esame di ITALIANO
    lo darei come pre-requisito.
    La domanda non è che abbia un gran senso (al pari del frammento di codice).
    Con un certo sforzo di immaginazione posso supporre che tu abbia DUE matrici, una che contiene le stringhe, la seconda che contiene, per ogni indice i,j della prima, il numero di vocali contenute.
    Ma è una otelmata
  • Re: Chiarimento su matrice 2d usata come 3d per setaccaire i caratteri in ogni cella

    +m2+ ha scritto:


    un'esame di ITALIANO
    lo darei come pre-requisito.
    La domanda non è che abbia un gran senso (al pari del frammento di codice).
    Con un certo sforzo di immaginazione posso supporre che tu abbia DUE matrici, una che contiene le stringhe, la seconda che contiene, per ogni indice i,j della prima, il numero di vocali contenute.
    Ma è una otelmata


    Ti Ringrazio per il buon consiglio sulle mie conoscenze linguistiche, forse mi sono espresso male, scrivendo velocemente. Lungi da me dal volerti oltraggiare ma non mi sei stato utile con la tua risposta, quindi se potessi spiegarti meglio e/o attenerti al tema in modo coerente ti sarei davvero grato, altrimenti ti pregherei di lasciare ad atri la risposta per quanto banale sia il mio quesito. Grazie
  • Re: Chiarimento su matrice 2d usata come 3d per setaccaire i caratteri in ogni cella

    Neanch'io ci ho capito nulla. Quindi anche volendomi attenere al tema, non mi 'oltraggiare' ma non si capisce quasi niente. Ti consiglierei di postare le dichiarazioni degli arrary usati e spiegare nuovamente, con frasi di senso compiuto, la problematica.
  • Re: Chiarimento su matrice 2d usata come 3d per setaccaire i caratteri in ogni cella

    salvo107 ha scritto:


    Ti Ringrazio per il buon consiglio sulle mie conoscenze linguistiche, forse mi sono espresso male, scrivendo velocemente. Lungi da me dal volerti oltraggiare ma non mi sei stato utile con la tua risposta, quindi se potessi spiegarti meglio e/o attenerti al tema in modo coerente ti sarei davvero grato, altrimenti ti pregherei di lasciare ad atri la risposta per quanto banale sia il mio quesito. Grazie
    Togli pure il "forse".
    Potrei esserti più utile se descrivessi in forma intelleggibile anche per chi ha una fantasia particolarmente sviluppata.
    Altrimenti, per quanto banale sia il tuo quesito, diviene necessario tirare ad indovinare.

    PS a te sembrerà banale, ma nel mondo del lavoro la conoscenza dell'italiano è molto, ma molto più rilevante del C.
    Poche cose squalificano maggiormente.
  • Re: Chiarimento su matrice 2d usata come 3d per setaccaire i caratteri in ogni cella

    @salvo107, i cazziatoni non sono mai da sottovalutare perche' indicano qualche errore di fondo importante.

    Purtroppo devo aggiungerne un'altro alla lista:

    il codice va CORRETTAMENTE IDENTATO, cioe' la colonna su cui inizia una riga di codice deve seguire PEDISSEQUAMENTE le regole di scrittura.

    Ti chiederai PERCHE?

    Perche' con un codice ben identato e' possibile capire A COLPO D'OCCHIO quali parti del codice sono interessate da una certa struttura di controllo (if, while, ecc) e questo aiuta moltissimo a capire dove si puo' annidare l'errore.

    Se ci pensi, il motivo e' semplice: se in un "if" la condizione e' vera, NON MI SERVE CONTROLLARE IL CODICE RELATIOVO ALLA CONDIZIONE FALSA (o viceversa, ovviamente).

    Quindi, OLTRE a fornire TUTTO IL CODICE, dover per TUTTO si intende il pezzo di codice che comprende ANCHE LA DICHIARAZIONE DELLE VARIABILI O DEI PARAMETRI usati, lo stesso deve essere anche BEN IDENTATO.

    Che poi sia arzigogolato, confuso, questo e' normale per chi e' alle prime armi

    Ora, il tuo codice avrebbe dovuto essere scritto cosi':

    
    for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++) {
                c1 = 0;
                if (S[i][j].length() > ret[0])
                    count2++; // count2 is ret[2]
                for (unsigned int k = 0; k < S[i][j].length(); k++)
                    switch (S[i][j][k]) {
                        case 'a':
                        case 'e':
                        case 'i':
                        case 'o':
                        case 'u':
                            c1++;
    
    e da questo si puo' capire che:

    1) hai una matriche NxN di array di caratteri? di lunghezza variabile (poiche' NON C'E' la definizione di S, NON SAPPIAMO che cosa e' S, visto che potrebbe essere UN'INFINITA' DI COSE, ed il fatto che esista il metodo "length()" NON DICE NULLA)
    2) i 3 CICLI (i, j, k) scandiscono tutti i caratteri
    3) c1 contiene il numero TOTALE di vocali
    4) count2 contiene il numero di stringhe di lunghezza MAGGIORE DI ZERO

    e TUTTO QUESTO SEMPLICEMENTE con il codice BEN IDENTATO (che ho DOVUTO FARE A MANO!!!!! Vabbe, non e' vero, lo ha fatto il tool figo che uso )
  • Re: Chiarimento su matrice 2d usata come 3d per setaccaire i caratteri in ogni cella

    migliorabile ha scritto:


    @salvo107, i cazziatoni non sono mai da sottovalutare perche' indicano qualche errore di fondo importante.

    Purtroppo devo aggiungerne un'altro alla lista:

    il codice va CORRETTAMENTE IDENTATO, cioe' la colonna su cui inizia una riga di codice deve seguire PEDISSEQUAMENTE le regole di scrittura.

    Ti chiederai PERCHE?

    Perche' con un codice ben identato e' possibile capire A COLPO D'OCCHIO quali parti del codice sono interessate da una certa struttura di controllo (if, while, ecc) e questo aiuta moltissimo a capire dove si puo' annidare l'errore.

    Se ci pensi, il motivo e' semplice: se in un "if" la condizione e' vera, NON MI SERVE CONTROLLARE IL CODICE RELATIOVO ALLA CONDIZIONE FALSA (o viceversa, ovviamente).

    Quindi, OLTRE a fornire TUTTO IL CODICE, dover per TUTTO si intende il pezzo di codice che comprende ANCHE LA DICHIARAZIONE DELLE VARIABILI O DEI PARAMETRI usati, lo stesso deve essere anche BEN IDENTATO.

    Che poi sia arzigogolato, confuso, questo e' normale per chi e' alle prime armi

    Ora, il tuo codice avrebbe dovuto essere scritto cosi':

    
    for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++) {
                c1 = 0;
                if (S[i][j].length() > ret[0])
                    count2++; // count2 is ret[2]
                for (unsigned int k = 0; k < S[i][j].length(); k++)
                    switch (S[i][j][k]) {
                        case 'a':
                        case 'e':
                        case 'i':
                        case 'o':
                        case 'u':
                            c1++;
    
    e da questo si puo' capire che:

    1) hai una matriche NxN di array di caratteri? di lunghezza variabile (poiche' NON C'E' la definizione di S, NON SAPPIAMO che cosa e' S, visto che potrebbe essere UN'INFINITA' DI COSE, ed il fatto che esista il metodo "length()" NON DICE NULLA)
    2) i 3 CICLI (i, j, k) scandiscono tutti i caratteri
    3) c1 contiene il numero TOTALE di vocali
    4) count2 contiene il numero di stringhe di lunghezza MAGGIORE DI ZERO

    e TUTTO QUESTO SEMPLICEMENTE con il codice BEN IDENTATO (che ho DOVUTO FARE A MANO!!!!! Vabbe, non e' vero, lo ha fatto il tool figo che uso )

    Mi dispiace colpa mia ho impudentemente copiato dalla soluzione, ma già così il rimprovero è ben gradito perché propositivo. Comunque il mio dubbio è perché nella matrice S[N][N] usiamo un nuovo indice K per scandire i caratteri cioè è "legale" usare un ulteriore indice in Una matrice definita in due dimensioni, so' perfettamente che K serve a capire se nel carattere è presente una o più vocali tra quelle specificate nello switch. Mi scuso per la testardaggine del mio dubbio , e per il mio essere alle prime armi
  • Re: Chiarimento su matrice 2d usata come 3d per setaccaire i caratteri in ogni cella

    S NON E' SEMPLICEMENTE UNA MATRICE come la pensi di solito, cioe' una matrice di numeri, ma e' una una matrice di vettori ed OGNI vettore, a sua volta, ha una sua propria lunghezza.

    Quindi, con i e j identifichi il vettore, con k l'elemento all'intero del vettore.

    Per estensione, potresti avere una matrice di matrici, in cui ti servono QUATTRO INDICI per identificare un singolo elemento semplice (i primi due per identificare la matrice, i secondi due per identificare l'elemento all'interno della seconda matrice) o anche peggio, una matrice di matrici di matrici (6 indici), e puoi generalizzare a piacimento.

    Non ci sono limiti sul numero di indici da utilizzare, perche' puoi combinare vettori e matrici in tutti i modi possibili: puoi fare

    un vettore di vettori (simile MA NON uguale ad una matrice)
    un vettore di matrici
    una matrice di vettori
    una matrice di matrici
    un vettore di vettori di vettori
    ...
  • Re: Chiarimento su matrice 2d usata come 3d per setaccaire i caratteri in ogni cella

    Chiarissimo sulla spiegazione, scusami per il ritardo della mia risposta , grazie mille
Devi accedere o registrarti per scrivere nel forum
8 risposte