|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Gières
Messaggi: 3617
|
[C] ordinamento elementi matrice
Devo fare il seguente esercizio: Trasformata di Burrows-Wheeler.
La trasformata di Burrows-Wheeler (BWT) è un algoritmo molto usato per la compressione dei dati. Implementare la tecnica di codifica. Bisogna richiedere all'utente una stringa di testo avente una lunghezza massima MAX_STR (l'utente può inserire anche meno di MAX_STR caratteri) e bisogna generare tutte le possibili rotazioni della stringa. Le varie rotazioni così generate, vanno ordinate considerate come stringhe da ordinare alfabeticamente in una matrice, di cui si stampa a schermo l'ultima colonna che è la trasformata BWT della stringa iniziale. In pratica il programma deve: * Chiedere di inserire una stringa; * Generare tutte le rotazioni della stringa in una matrice; * Ordinare alfabeticamente le RIGHE della matrice contenenti le rotazioni; * Stampare a schermo l'ultima COLONNA della matrice. Es.: Inserisci una stringa: BANANA Le rotazioni sono: BANANA ANANAB NANABA ANABAN NABANA ABANAN Matrice stringhe ordinate: ABANAN ANABAN ANANAB BANANA NABANA NANABA sono arrivato a fare le rotazioni ma adesso non riesco a ordinare la matrice posto il programma che ho scritto, con l'ordinamento sbagliato. grazie in anticipo a tutti coloro che mi aiuteranno!!!
__________________
Intel i5 4570 - Gigabyte Z87-HD3 - Antec KÜHLER 620 V4 - Corsair/Kingston 16GB DDR3 1600Mhz - KFA2 GTX 1070 EX @ EXOC bios - SanDisk Ultra II 480GB - EVGA 650GQ - Sony KDL-24EX320 - Logitech G502 & G933 - SteelSeries APEX M500 - W10 64bit |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Fare l'ordinamento è abbastanza semplice:
Puoi usare l'aloritmo di ordinamento che vuoi... La cosa più importante è il confronto: strcmp(matrice[i], matrice[j]) ritorna un valore > di zero se la stringa i è maggiore della stringa j, un valore minore di zero se la stringa i è minore della stringa j... Quindi a seconda del valore ritornato da strcmp compi o meno lo scambio degli elementi... Lo scambio fra stringhe puoi farlo così: char tempString[N]; strcpy(tempString, matrice[i]); strcpy(matrice[i], matrice[j]); strcpy(matrice[j], tempString); |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2005
Città: Gières
Messaggi: 3617
|
grazie per la risposta, non pensavo che la strcmp confrontasse elementi di una matrice.
ho corretto in questo modo e funziona! void ordina(char ruotato[][MAX_STR],int a) { int i,max,j; char tempString[MAX_STR]; for(i=0;i<a-1;i++){ for(j=i+1;j<a;j++){ max=strcmp(ruotato[i],ruotato[j]); if(max==1){ strcpy(tempString, ruotato[i]); strcpy(ruotato[i], ruotato[j]); strcpy(ruotato[j], tempString); } } } stampa(ruotato,a); //richiama funzione per stampare }
__________________
Intel i5 4570 - Gigabyte Z87-HD3 - Antec KÜHLER 620 V4 - Corsair/Kingston 16GB DDR3 1600Mhz - KFA2 GTX 1070 EX @ EXOC bios - SanDisk Ultra II 480GB - EVGA 650GQ - Sony KDL-24EX320 - Logitech G502 & G933 - SteelSeries APEX M500 - W10 64bit |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Infatti non stai ordinando una matrice, ma di fatto un vettore di stringhe...
matrice[i] è una stringa... Sostituisci max==1 con max > 0...le specifiche dicono che il valore può essere anche magiore di 1... |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
A me non funziona, mi da problemi quando passo la matrice alla funzione, è come se gli passasse qualcos'altro, infatti poi mi stampa "(null)" un po' di volte quando lo eseguo..
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
Ho trovato il problema: io all'inizio avevo messo come dimensione massima della stringa 20 invece di 100 e dopo mi stampava cose senza senso, invece mettendo 100 va tutto bene. Chissà perchè...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:41.



















