Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ordinamento di stringhe ?
Forum - C/C++ - Ordinamento di stringhe ?

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 14:03
Mercoledì, 09/04/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? :hail:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:28
Mercoledì, 09/04/2014
Quale algoritmo di ordinamento vi ha fatto studiare?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 14:36
Mercoledì, 09/04/2014
Sisi, ordinamento per scambio e il sort a bolle.. solo che abbiamo utilizzato solo numeri interi..

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6116
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 15:32
Mercoledì, 09/04/2014
Testo quotato

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++

  1. char a = 'a';
  2. char b = 'b';
  3.  
  4. if (a < b){
  5.   // ...
  6. }



Funziona benissimo.

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

Codice sorgente - presumibilmente C/C++

  1. char *str = "ciao";
  2. char ch = str[0];





Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 15:59
Mercoledì, 09/04/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

  1. for(i=0;i<dim-1;i++){
  2.  
  3. for(j=1;j<dim;j+1){
  4.  
  5. if(V[i]>V[j]){
  6.  
  7. Scambio(V[i],V[j])
  8. }
  9.  
  10. }
  11.  
  12. }
  13. 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++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6. /*Variabili Globali*/
  7. int i=0;//indice delle righe
  8. int j=0;//indice delle colonne
  9.  
  10.  
  11. /*Prototipi Procedure*/
  12. //void inseriscicitta(char citta);
  13. //void oraritemp(int *temp);
  14.  
  15. /*Programma Principale*/
  16. int main()
  17. {   char citta [7][20];
  18.     int  temp [7][4];    //Matrici parallele hanno in comune le righe
  19.     float media[7];
  20.     int M=0;
  21.    
  22.    
  23.     //Inseriamo le città
  24.     for(i=1;i<=6;i++){
  25.        printf("Inserisci una citta': ");
  26.        gets(citta[i]);                    
  27.        }            
  28.        //inseriscicitta(citta);
  29.    
  30.     //Impostiamo gli orari delle temperature
  31.     //oraritemp(temp);
  32.     temp[0][0] = 6;
  33.     temp[0][1] = 12;
  34.     temp[0][2] = 16;
  35.     temp[0][3] = 00;
  36.    
  37.     //Inseriamo le temperature
  38.        for(i=1;i<=6;i++){
  39.        printf("Inserisci la temperatura per %s:\n",citta[i]);
  40.            for(j=0;j<4;j++){
  41.            scanf("%d",temp[j]);
  42.            }                              
  43.        }
  44.    
  45.     //Media temperature
  46.        for(i=1;i<=6;i++){
  47.        for(j=0;j<4;j++){
  48.        M=M+*temp[j];
  49.        }
  50.        media[i] = M/4;
  51.        printf("Media Temperature di %s: %d\n",citta[i],media[i]);                  
  52.     }
  53.        
  54.        printf("\n\n");
  55.     system("PAUSE");
  56.     return(0);
  57. }
  58.  
  59. /*Procedure:*/
  60.  
  61. /*
  62. void inseriscicitta(char citta){
  63.        for(i=0;i<=6;i++){
  64.        printf("Inserisci una citta': ");
  65.        gets(citta[i]);                    
  66.        }            
  67.                        
  68. return;                    
  69. }
  70.  
  71. /*
  72. void oraritemp(int *temp){
  73.      
  74.     *temp[0][0] = 6;
  75.     *temp[0][1] = 12;
  76.     *temp[0][2] = 16;
  77.     *temp[0][3] = 00;
  78.      
  79. return;    
  80. }
  81. */



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 il 09/04/2014 alle 16:06
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 16:46
Mercoledì, 09/04/2014
E' un casino vero? AHAHHA Queste so le tracce che mi danno i miei prof -.-

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6116
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 17:19
Mercoledì, 09/04/2014
Ma...

Codice sorgente - presumibilmente Plain Text

  1. for(i=1;i<=6;i++){
  2.        for(j=0;j<4;j++){
  3.        M=M+*temp[j];
  4.        }
  5.        media[i] = M/4;
  6.        printf("Media Temperature di %s: %d\n",citta[i],media[i]);                  
  7.     }



Questo qui:

Codice sorgente - presumibilmente Plain Text

  1. 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...


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 17:25
Mercoledì, 09/04/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

PM Quote
Avatar
perillitommaso (Normal User)
Pro


Messaggi: 186
Iscritto: 28/01/2014

Segnala al moderatore
Postato alle 17:34
Mercoledì, 09/04/2014
Ma comunque, ho scritto così: M=M+*temp[j]; perchè se non mettevo * mi dava errore

PM Quote
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo