PDA

Visualizza versione completa : Array e Matrice di tipo stringa


GiulioCesare
29-10-2003, 11.37.38
Salve ragazzi, devo fare un programma che dato una matrice 3x3 di tipo
stringa, dia un array di 9 elementi di tipo stringa ordinato
descrescentemente, cioè dalla stringa con meno caratteri a quella con più
caratteri, e poi un altro array sempre di 9 elementi questa volta di tipo
intero che dica di quanti caratteri e composto ogni singolo elemento l'array precedente.

Qualcuno mi sa aiutare :eek:

Cucciolo
29-10-2003, 22.07.28
ma con quale linguaggio?

GiulioCesare
30-10-2003, 15.12.21
IL programma deve essere fatto in C++ , scusate la dimenticanza ehehhe

Cucciolo
30-10-2003, 21.20.24
mi spiace ma nn posso aiutarti

LoryOne
31-10-2003, 16.28.52
Non lasciarti fuorviare dal fatto che hai array bidimensionali, considerali monodimensionali.
Mi spiego meglio:
Tu hai una situazione del tipo:

MioArray[3][3]

Farai inserire all'utente n° 9 (3x3) elementi, cioè ad esempio:

MioArray[1,1]="a"
MioArray[1,2]="b"
MioArray[1,3]="c"
MioArray[2,1]="d"
MioArray[2,2]="e"
MioArray[2,3]="f"
MioArray[3,1]="g"
MioArray[3,2]="h"
MioArray[3,3]="i"

Poi dovrai ordinarli in ordine decrescente ma ogni singolo elemento dovrà essere inserito in un array monodimensionale da n° 9 elementi.
Questo significa che:

MioArray1[1]=MioArray[1,1]
MioArray1[2]=MioArray[1,2]
MioArray1[3]=MioArray[1,3]
MioArray1[4]=MioArray[2,1]
MioArray1[5]=MioArray[2,2]
MioArray1[6]=MioArray[2,3]
MioArray1[7]=MioArray[3,1]
MioArray1[8]=MioArray[3,2]
MioArray1[9]=MioArray[3,3]

A questo punto si tratta solo di eseguire un semplice algoritmo di ordinamento sequenziale in ordine decrescente (Bubblesort va benissimo per matrici di dimensioni così ridotte, altrimenti sarebbe sempre consigliato il Quicksort).


for(a=1; a<9 ; a++)
for(b=8 ; b>=a; b--)
{
if(MioArray[b-1] < MioArray[b]) // Se MioArray[b-1] > MioArray[b] hai l'ordinamento crescente
{
t = MioArray[b-1];
MioArray[b-1] = MioArray[b];
MioArray[b] = t;
}
}


Praticamente utilizza una serie di confronti e, se necessario, scambia gli elementi adiacenti dell'array.
Alla fine avrai i,h,g,f,e,d,c,b,a

Saluti :)

GiulioCesare
31-10-2003, 16.51.52
In effetti ho provato a fare proprio come dici tu, anche se la cosa è un pò più complessa visto che parto da una matrice di stringhe, e voglio due array risultanti uno di interi e uno di stringhe, ho provato a buttare giù una bozza di codice, ma il compilatore non vuole saperne di compilare :( , metto qui la sorgente, sperando che qualcuno mi dica che errori ci sono:

#include <iostream>
#include <cstring>

char scambio_v[9][10](char v[9][10])
{
int i;
char temp[10];

for (i=0; i<=8; i++)
{
if (strlen(v[i])<strlen(v[i++]))
{
strlcpy(temp,v[i]);
strlcpy(v[i],v[i++]);
strlcpy(v[i++],temp);

}
}
for (i=0; i<=8; i++)
return v[i];


}

int scambio_z[9](int z[9])
{
int i,temp;

for (i=0; i<=8; i++)
{
if (z[i]<z[i++])
{
temp=z[i];
z[i]=z[i++];
z[i++]=z[i];

}
}
for (i=0; i<=8; i++)
return z[i];

}

using namespace std;
int main()
{
char matrice[3][3][10];
char v[9][10];
int z[9];
int i,j,x;


cout<<"Inizializzazione matrice" <<endl;
for (i=0; i<=2; i++)
for (j=0; j<=2; j++)
cin>>matrice[i][j];


x=0;
for (i=0; i<=2; i++)
for (j=0; j<=2; j++)
{
strcpy(v[x],matrice[i][j]);
z[x]=strlen(matrice[i][j]);
x=x+1;
}

for (i=0; i<=8; i++)
{
strcpy(v[i],scambio_v(v));
z[i]=scambio_z(z);
}
cout<<"Vettore ordinato descrescentemente" <<endl;
for (i=0; i<=8; i++)
cout<<v[i] <<endl;

cout<<"Vettore contenente la lunghezza di ogni stringa" <<endl;
for (i=0; i<=8; i++)
cout<<z[i] <<endl;

return 0;
}

metallica83
20-11-2003, 14.03.47
Il codice in teoria sembra corretto; puo' darsi che tu abbia usato alcune funzioni proprie del C non riconosciute con C++...

Ho provato a compilare il programma con Visual C++ e mi ha trovato i seguenti errori:

-scambio_v[9][10] e scambio_z[9] non possono essere usati per nomi di funzioni (prova con scambio_v e scambio_z)
-strlcpy non e' una funzione valida (strcpy e' quella corretta)
Inoltre prova a ricontrollare la dichiarazione di main che a me risulta errata alla compilazione.

ciao