Oppure

Loading
09/04/14 12:03
perillitommaso
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? :hail:
aaa
09/04/14 12:28
nessuno
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à.
09/04/14 12:36
perillitommaso
Sisi, ordinamento per scambio e il sort a bolle.. solo che abbiamo utilizzato solo numeri interi..
aaa
09/04/14 13:32
pierotofy
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. asciitable.com/

Fare quindi un confronto:

char a = 'a';
char b = 'b';

if (a < b){
  // ...
}


Funziona benissimo.

Per prendere il primo carattere da una stringa (array di caratteri):

char *str = "ciao";
char ch = str[0];


Il mio blog: piero.dev
09/04/14 13:59
perillitommaso
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:
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:

#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;     
}
*/


Il codice è un po sporco perchè ci sto lavorando, ho avuto alcuni problemi nelle procedure ma quello è secondario ... adesso il problema principale è ordinare l'array dei nomi delle città, e di conseguenza anche ordinare le temperature perchè se riordino solo l'array delle città, poi mi ritrovo che le città hanno temperature sbagliate. E non ho capito una cosa, perchè quando andavo a compilare mi dava errore a : " M=M+temp[j]; " ? L'ho risolto aggiungendo poi * prima di temp[j] ma non ho capito perchè.. mi diceva che non era possibile convertire int in *int quando non stavo usando nessuna procedura .. :-| :-? :d
Ultima modifica effettuata da pierotofy 09/04/14 14:06
aaa
09/04/14 14:46
perillitommaso
E' un casino vero? AHAHHA Queste so le tracce che mi danno i miei prof -.-
aaa
09/04/14 15:19
pierotofy
Ma...

  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:

M=M+*temp[j];


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...
Il mio blog: piero.dev
09/04/14 15:25
perillitommaso
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
aaa