Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328

    [Java] Array a due dimensioni: esercizio

    Scrivere un programma Java MaxLen che , data una matrice A di caratteri (di
    dimensionen×m), determini la lunghezza massima tra le sequenze orizzontali,
    verticali e diagonali cheappaiono nella matrice e sono composte di caratteri
    tutti uguali.

    Il testo completo è qui:
    http://www.dimi.uniud.it/~stefano/ProvaJavaLab.pdf

    Ora, per contare i caratteri in diagonale senza scrivere duemila cicli, voi
    come fareste?

    Per esempio,
    codice:
     private void checkHorizontal(){
    
      for (int i=0; i<nRighe; i++){
       horLen = 1;
       for (int j=0; j<nColonne-1; j++){
    
        if (array[i][j]==array[i][j+1]){
         horLen++;
         if (horLen > maxLen)
          maxLen = horLen;
        }
       }
      }
    
     }
    Trova la lunghezza massima in orizzontale, ed in verticale è speculare a questa, ma in diagonale sorgono una miriade di complicazioni:
    tanto per cominciare ci sono due versi da controllare, \ e / , poi se scorro le righe, incrementando di volta in volta gli indici dell'array di 1(uno), per pescare i caratteri uguali, esco fuori dall'array se n° colonne è minore di n° righe, e viceversa scorrendo le colonne.

    Voi come fareste?

  2. #2
    Ciao, non so se hai letto il mio appello "programmatori di tutta italia unitevi", ma questo è proprio il genere di discussioni che mi interessano. Ti dispiace se la pubblico sul mio sito?

    httP://www.angelfire.com/80s/degno/index.htm

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328
    L'ho appena letto. Molto interessante, anche se essendo piuttosto alle prime armi non credo di poter dare un apporto

    Ovviamente puoi pubblicarla sul tuo sito (la discussione, il testo dei quesiti non è roba mia e cmq è dell'anno scorso, sicuramente non ci sono problemi). Nel caso, appena sono venuto a capo del problema, ti mando il codice.

    Bella iniziativa. Complimenti!

  4. #4
    E' la soluzione per la diagonale "\" in versione C (il mio compilatore Java ha qualche problema). Quando compili tutto il programma me lo mandi così lo pubblico? (verifica che funzioni per tutte le combinazioni anche se non ci dovrebbero essere problemi).

    #include <stdio.h>

    void main()
    {
    char matrix[4][5];
    int horLen=1,maxLen=1;
    int i,j,m,n;
    int nRighe=4,nColonne=5;

    matrix[0][0]='a';
    matrix[0][1]='b';
    matrix[0][2]='c';
    matrix[0][3]='a';
    matrix[0][4]='a';
    matrix[1][0]='b';
    matrix[1][1]='a';
    matrix[1][2]='b';
    matrix[1][3]='c';
    matrix[1][4]='a';
    matrix[2][0]='b';
    matrix[2][1]='a';
    matrix[2][2]='b';
    matrix[2][3]='a';
    matrix[2][4]='a';
    matrix[3][0]='c';
    matrix[3][1]='c';
    matrix[3][2]='c';
    matrix[3][3]='c';
    matrix[3][4]='c';

    for (i=0;i<(nRighe-1);i++)
    for (j=0;j<(nColonne-1);j++)
    {
    m=i;
    n=j;
    while ( ((m+1)<nRighe) && ((n+1)<nColonne) )
    {
    if (matrix[m][n]==matrix[m+1][n+1])
    {
    horLen++;
    if (horLen>maxLen) maxLen=horLen;
    }
    else horLen=1;
    m++;
    n++;
    }
    }

    printf ("%d",maxLen);
    }

  5. #5
    Mi mandi altri quesiti, magari un po' più complicati?
    Riguarda la tua funzione e confrontala con la mia, devi aggiungere un "else"

    private void checkHorizontal(){

    for (int i=0; i<nRighe; i++){
    horLen = 1;
    for (int j=0; j<nColonne-1; j++){

    if (array[i][j]==array[i][j+1])
    {
    horLen++;
    if (horLen > maxLen)
    maxLen = horLen;
    }
    N.B. else horLen=1;


    }
    }
    }

    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    328
    Guarda che il codice che hai postato è sbagliato. Gli ho passato due matrici a caso, e i valori di maxLen che tira fuori non sono esatti. Ora non ho tempo di controllare bene il codice, cmq ecco un capture di quello che fa su due matrici, la prima era 3X7 e la seconda 5X2. Il tuo codice, quasi identico a quello che avevo ideato io in un primo momento, purtroppo funziona solo se la differenza tra nRighe e nColonne è 1 o 0. Se è maggiore, perdo qualcosa.

    Infatti, non vorrei sbagliare, data l'ora e la stanchezza, ma:
    se controllo le diagonali finché m < nRighe & n<nColonne, succede che controllo solo una parte delle diagonali.
    Del resto, se non faccio questo controllo, sicuramente vado fuori indice. Comincio a rassegnarmi all'idea di dover fare una miriade di cicli diversi, anche distinguendo i casi nRighe > nColonne oppure viceversa...

    ---------- Esecuzione Applicazione ----------
    riga: 0 colonna: 0
    riga + 1: 1 colonna + 1: 1
    riga: 0 colonna: 1
    riga + 1: 1 colonna + 1: 2
    riga: 0 colonna: 2
    riga + 1: 1 colonna + 1: 3
    riga: 0 colonna: 3
    riga + 1: 1 colonna + 1: 4
    riga: 0 colonna: 4
    riga + 1: 1 colonna + 1: 5
    riga: 0 colonna: 5
    riga + 1: 1 colonna + 1: 6
    riga: 1 colonna: 0
    riga + 1: 2 colonna + 1: 1
    riga: 1 colonna: 1
    riga + 1: 2 colonna + 1: 2
    riga: 1 colonna: 2
    riga + 1: 2 colonna + 1: 3
    riga: 1 colonna: 3
    riga + 1: 2 colonna + 1: 4
    riga: 1 colonna: 4
    riga + 1: 2 colonna + 1: 5
    riga: 1 colonna: 5
    riga + 1: 2 colonna + 1: 6

    Seconda Matrice
    riga: 0 colonna: 0
    riga + 1: 1 colonna + 1: 1
    riga: 1 colonna: 0
    riga + 1: 2 colonna + 1: 1
    riga: 2 colonna: 0
    riga + 1: 3 colonna + 1: 1
    riga: 3 colonna: 0
    riga + 1: 4 colonna + 1: 1
    Max occorrenze di ogg2: 3
    Il programmatore lo vedi dal coraggio, dall'altruismo, dalla fantasia...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.