perillitommaso (Normal User)
Pro
Messaggi: 186
Iscritto: 28/01/2014
|
Ciao a tutti, ho un piccolo problema... ho una matrice con al suo interno una serie di nomi di città. Li devo ordinare in base alla prima lettera nel nome della città. Non devo usare nessuna funzione ma il professore vuole vedere proprio l'algoritmo.. qualcuno sa dirmi qualcosina?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Quale algoritmo di ordinamento vi ha fatto studiare?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
perillitommaso (Normal User)
Pro
Messaggi: 186
Iscritto: 28/01/2014
|
Sisi, ordinamento per scambio e il sort a bolle.. solo che abbiamo utilizzato solo numeri interi..
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Postato originariamente da perillitommaso:
ho una matrice con al suo interno una serie di nomi di città.
|
Un array, un array... non una matrice. Le matrici si usano in matematica, qui siamo in informatica.
Ogni lettera corrisponde ad un numero, vedi la tabella ASCII. http://www.asciitable.com/
Fare quindi un confronto:
Codice sorgente - presumibilmente C/C++ |
char a = 'a';
char b = 'b';
if (a < b){
// ...
}
|
Funziona benissimo.
Per prendere il primo carattere da una stringa (array di caratteri):
Codice sorgente - presumibilmente C/C++ |
char *str = "ciao";
char ch = str[0];
|
|
|
perillitommaso (Normal User)
Pro
Messaggi: 186
Iscritto: 28/01/2014
|
Ma quindi io posso liberamente mettere a confronto l'iniziale delle città? esempio:
immagine un array bidimensionale di 6 righe e 15 colonne, io ho bisogno solo della prima lettera di ogni stringa, ho quindi due indici, i e j, i per le righe e j per le colonne. Io ho questo algoritmo di ordinamento che utilizza uno scambio ma lo abbiamo usato SOLO nel vettore, non in un array bidimensionale... questo è l'algoritmo:
Codice sorgente - presumibilmente Plain Text |
for(i=0;i<dim-1;i++){
for(j=1;j<dim;j+1){
if(V[i]>V[j]){
Scambio(V[i],V[j])
}
}
}
return;
|
V[ i] e V[j] rappresentano lo stesso vettore ... è solo che ci sono due indici, uno che va in avanti all'altro, non so come spiegarvelo.. mentre per l'array bidimensionale che ha righe e colonne, come faccio? Anche perchè, vorrei sapere se ci fosse un'istruzione che mi dichiari i due indici e cioè, io ho dichiarato sia i che j ma come faccio io a capire quale dei due è della riga e quale della colonna? A livello logico nell'analisi e nel campione io so quale è della riga e quale è della colonna ma quando vado a scrivere in C come faccio? Perchè sto avendo dei problemi anche nella continuazione del programma. In poche parole ho due array bidimensionali paralleli e un vettore parallelo, il primo array conterrà i nomi delle città, il secondo vettore conterrà i gradi della temperatura a un rispettivo orario e il vettore infine conterrà poi la media. Io ho iniziato a lavorarci su, ma quando vado a visualizzare la media mi esce sempre 0:
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <stdlib.h> #include <string.h> /*Variabili Globali*/ int i=0;//indice delle righe int j=0;//indice delle colonne /*Prototipi Procedure*/ //void inseriscicitta(char citta); //void oraritemp(int *temp); /*Programma Principale*/ int main() { char citta [7][20]; int temp [7][4]; //Matrici parallele hanno in comune le righe float media[7]; int M=0; //Inseriamo le città for(i=1;i<=6;i++){ printf("Inserisci una citta': "); gets(citta[i]); } //inseriscicitta(citta); //Impostiamo gli orari delle temperature //oraritemp(temp); temp[0][0] = 6; temp[0][1] = 12; temp[0][2] = 16; temp[0][3] = 00; //Inseriamo le temperature for(i=1;i<=6;i++){ printf("Inserisci la temperatura per %s:\n",citta[i]); for(j=0;j<4;j++){ scanf("%d",temp[j]); } } //Media temperature for(i=1;i<=6;i++){ for(j=0;j<4;j++){ M=M+*temp[j]; } media[i] = M/4; printf("Media Temperature di %s: %d\n",citta[i],media[i]); } printf("\n\n"); system("PAUSE"); return(0); } /*Procedure:*/ /* void inseriscicitta(char citta){ for(i=0;i<=6;i++){ printf("Inserisci una citta': "); gets(citta[i]); } return; } /* void oraritemp(int *temp){ *temp[0][0] = 6; *temp[0][1] = 12; *temp[0][2] = 16; *temp[0][3] = 00; return; } */
|
Ultima modifica effettuata da pierotofy il 09/04/2014 alle 16:06 |
|
perillitommaso (Normal User)
Pro
Messaggi: 186
Iscritto: 28/01/2014
|
E' un casino vero? AHAHHA Queste so le tracce che mi danno i miei prof -.-
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
Ma...
Codice sorgente - presumibilmente Plain Text |
for(i=1;i<=6;i++){
for(j=0;j<4;j++){
M=M+*temp[j];
}
media[i] = M/4;
printf("Media Temperature di %s: %d\n",citta[i],media[i]);
}
|
Questo qui:
Codice sorgente - presumibilmente Plain Text |
Perche' dereferenzi temp[j]?
La traccia in se non e' complessa, ma sembra che ti manchino un po' di fondamenta sul linguaggio C. Ripassa di nuovo i capitoli su array, array bidimensionali e puntatori. Dopo prova a riscrivere il programma...
|
|
perillitommaso (Normal User)
Pro
Messaggi: 186
Iscritto: 28/01/2014
|
Io so quello che vedi ... il professore ieri ha spiegato l'array bidimensionale e oggi ci ha dato la traccia... non ci ha detto niente di che, ci ha detto solo cosa devono contenere gli array
|
|
perillitommaso (Normal User)
Pro
Messaggi: 186
Iscritto: 28/01/2014
|
Ma comunque, ho scritto così: M=M+*temp[j]; perchè se non mettevo * mi dava errore
|
|