Pages: [1]   Go Down
Print
Author Topic: Esercitazione matrici frastagliate c++  (Read 812 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
idroid93
Matricola
*
Offline Offline

Posts: 5


« on: 03-02-2014, 20:29:48 »

Salve a tutti. Mi stavo esercitando a fare un esercizio con le matrici frastagliate. Ho trovato qui sul forum un esercizio però è fatto in java. Potete darmi una mano a capire dove sbaglio ?? Ringrazio a tutti in anticipo 
Sotto metto il codice che ho fatto e che vorrei provare a compilare direttamente nel main
http://pastebin.com/11Z2vAsk
Logged
NinoResin
Matricola
*
Offline Offline

Posts: 12


« Reply #1 on: 04-02-2014, 14:17:20 »

Code:
/*Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata
S di stringhe e restituisca la parola più lunga presente nella colonna completa
più a destra di S (si suppone che ogni riga di S sia non vuota)*/
# include <iostream>
# include <string>
using namespace std;
string metodo (string ** S, int righe, int* colonne)
{
string Max="";
int cMax=0;
for (int j=0; j<colonne; j++)
{
for (int i=0; i<righe; i++)
{
if (S[i][j]==0)
{
cMax=j-1;
}
}
}
for (int i=0; i<righe; i++)
{
for (int j=cMax; j<colonne; j++)
{
if (Max<S[i][j])
{
Max=S[i][j];
}
}
}
return Max;
}
Incollo il codice per semplicita' di consultazione
In pratica tu intendi scorrere la matrice per colonne e vedere se ad un certo punto trovi il "buco" con l'istruzione
Code:
if (S[i][j]==0)
{
cMax=j-1;
}
un confronto del genere per il compilatore e' lecito, e questo e' un grave problema, visto che siccome stai operando con i puntatori il compilatore non fa nessun controllo sull'eventuale presenza/assenza di un elemento facente parte dell'array, semplicemente lui va a controllare quella parte della memoria (che ripeto, potrebbe non far parte dell'array e quindi potrebbe esserci memorizzata QUALSIASI cosa) e poi fa il confronto che hai chiesto.

Altra cosa:
Code:
for (int j=0; j<colonne; j++)
quest'altra cosa e' un po' stranetta. traduco letteralmente:
int j=0 // alloca una variabile intera locale al blocco di istruzioni chiamata j e assegnale il valore 0
j<colonne // prendi il valore di j che e' un intero e il valore di colonne (che e' un puntatore) e confrontali
dovresti usare piuttosto qualcosa del tipo colonne[k] per vedere il contenuto dell'array che rappresenta il numero di colonne della riga k (dove k puo' essere qualunque indice inferiore al parametro righe) e vedi se cosi' riesci. se trovo qualcos'altro saro' ben lieto di aiutare  ok

p.s. chiunque e' liberissimo di smentire quanto detto dal sottoscritto ed insultarmi a volonta' nel caso avessi scritto baggianate xD

Edit: errori ortografici
« Last Edit: 04-02-2014, 14:19:45 by NinoResin » Logged
NinoResin
Matricola
*
Offline Offline

Posts: 12


« Reply #2 on: 04-02-2014, 15:26:31 »

altra cosa che ho notato, la consegna chiede di restituire la parola piu' lunga
Code:
if (Max<S[i][j])
questo pezzo di codice non fa il confronto tra le lunghezze di due stringhe, ma il confronto tra l'ordine alfabetico delle stringhe, nel tuo caso se tu trovi le stringhe "cassaforte" e "dado" il confronto restituisce TRUE perche' anche se cassaforte e' piu' lunga viene prima di dado nel dizionario. per confrontare le lunghezze usa il metodo length(), quindi:
Code:
(Max.length()<(S[i][j]).length())
Logged
Pages: [1]   Go Up
Print
Jump to: