Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 39
  1. #1

    [C]Ordinamento di stringhe in array e ordinamento di interi in array

    Ciao a tutti, ho un piccolo problema nell'ordinamento delle stringhe e di conseguenza anche nell'ordinamento degli interi. perchè vi spiego, ho due array bidimensionali paralleli, uno che contiene i nomi delle citta e uno che contiene le temperature delle citta. Dopo che ho riordinato le citta in base all'ordine alfabetico devo anche riordinare le temperature perchè altrimenti mi ritrovo con città che hanno temperature sbagliate.
    Il mio codice sorgente è questo:
    codice:
    void ordinamento(char citta[][15],int temp[][4]){
         for(i=0;i<6;i++){
         for(j=i+1;j<6;j++){
         if(citta[i][0]>citta[j][0]){
         scambiocitta(&citta[0]); 
         scambiotemp(&temp[0]);}
         }
         }
         return;
         }
    
    void scambiocitta(char citta[][15]){
         char *stringapp;
              stringapp = citta[i];
               citta[i] = citta[j];
               citta[j] = stringapp;
         return;
         }
    void scambiotemp(int temp[][4]){
         int intapp[4];
    
    
    
    
         return;
         }
    Come vedete devo ancora continuare la procedura che scambia i valori delle temperature, non so proprio come fare sto nel pallone
    Qualcuno può aiutarmi?
    Ultima modifica di tommasoperilli; 19-04-2014 a 13:54

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao, innanzitutto vediamo come scambiare due interi: la tua scambiotemp non può prendere in ingresso solo l'array nel quale effettuare lo scambio, ma deve avere anche gli indici dei due elementi da scambiare. Quindi il suo prototipo sarà del tipo

    codice:
    void scambiotemp(int * array, int primoIndice, int secondoIndice)

    Per darti un punto di partenza, ti posto un piccolo esempio:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    void stampaArray(int * arr, int size)
    {
        int i=0;
        for(i=0; i<size;i++) printf("%d\n", arr[i]);
    }
    
    
    void scambia(int * arr, int a, int b)
    {
        int tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }
    
    
    int main()
    {
        int array[2][3];
    
    
        array[0][0] = 1;
        array[0][1] = 2;
        array[0][2] = 3;
    
    
        stampaArray(array[0], 3);
        scambia(array[0], 0, 2);
        stampaArray(array[0], 3);
    
    
        return 0;
    }

    Facci sapere.

  3. #3
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Ciao non ho guardato il tuo codice , ma la soluzione mi sembra intuitiva ...

    tu hai un array citta[] e un array temperature[] , la posizione i nome città è uguale alla posizione i
    temperatura , allora con un unica funzione se scambi citta scambi temperatura

    Come salvi le temperature ???? se hai 5 nomi citta[5][15] , ti serve un array di 5 elementi temperature[5] , cosa ti serve una matrice di interi ???????
    Ma forse ho capito male


    codice:
    void scambio(char citta[][15],int temperatura[],int i , int j){
    char string[20];
         int temp;
              strcpy(string,citta[i]);
              temp=temperatura[i];
              strcpy( citta[i],citta[j]);
              temperatura[i]=temperatura[j];
              strcpy(citta[j], string);
              temperatura[j]=temp;
    
    return;
    }
    Tecnologia

  4. #4
    Allora in anzitutto vi ringrazio per avermi risposto adesso vi dico, io uso due indici dichiarati globali, i (per le righe) e j per le colonne
    codice:
    int i=0;//indice delle righe
    int j=0;//indice delle colonne
    poi quindi ho come detto precedentemente ho due array bidimensionali paralleli, che hanno le stesse righe
    codice:
    char citta[7][15];
        int  temp [7][4] = {6,12,16,00};
    ho inizializzato la prima riga del array tempo perchè contiene gli orari delle temperature..
    dopo aver letto le citta
    codice:
    void inseriscicitta(char citta[][15]){     
          for(i=1;i<=6;i++){
           printf("Inserisci una citta': "); 
           gets(citta[i]);                    
           }             
    
    
         return;
         }
    e le temperature:
    codice:
    void inseriscitemp(int temp[][4],char citta[][15]){     
          for(i=1;i<=6;i++){
           printf("Inserisci la temperatura per %s:\n",citta[i]);
               for(j=0;j<4;j++){
               printf("Alle ore %d: ",temp[0][j]);
               scanf("%d",&temp[i][j]);
               }                              
           }
         return;
         }
    devo fare l'ordinamento... che è l'unica cosa del programma in cui mi sono trovato un po' nel panico insomma...
    allora io ho fatto così come ho detto prima:
    codice:
    void ordinamento(char citta[][15],int temp[][4]){     for(i=0;i<6;i++){
         for(j=i+1;j<6;j++){
         if(citta[i][0]>citta[j][0]){
         scambiocitta(&citta[0]); 
         scambiotemp(&temp[0]);}
         }
         }
         return;
         }
         
    void scambiocitta(char citta[][15]){
         char *stringapp;
              stringapp = citta[i];
               citta[i] = citta[j];
               citta[j] = stringapp;
         return;
         }
    
    
    void scambiotemp(int temp[][4]){
         int intapp[4];
         
         for(j=0;j<4;j++){
         intapp[j]=temp[i][j];                 
         }
         for(j=0;j<4;j++){
                          
         
         }
                    
         
         
         return;
         }
    la prima procedura è solo quella di inizializzazione, poi ho la procedura che scambia le stringhe delle citta e li ho un problema nella compilazione infatti il compilatore mi dice a questa riga:
    codice:
    citta[i] = citta[j];
    questo errore: ISO C++ forbids assignment of arrays
    e a questa riga:
    codice:
    citta[j] = stringapp;
    questo errore: incompatible types in assignment of `char*' to `char[15]'

    e non so proprio come risolverli
    inoltre non riesco a effettuare lo scambio dei valori delle temperature, ho solo dichiarato un vettore con dimensione 4 che sarà un vettore di appoggio per lo scambio

  5. #5
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    Ciao non ho guardato il tuo codice , ma la soluzione mi sembra intuitiva ...

    tu hai un array citta[] e un array temperature[] , la posizione i nome città è uguale alla posizione i
    temperatura , allora con un unica funzione se scambi citta scambi temperatura

    Come salvi le temperature ???? se hai 5 nomi citta[5][15] , ti serve un array di 5 elementi temperature[5] , cosa ti serve una matrice di interi ???????
    Ma forse ho capito male


    codice:
    void scambio(char citta[][15],int temperatura[],int i , int j){
    char string[20];
         int temp;
              strcpy(string,citta[i]);
              temp=temperatura[i];
              strcpy( citta[i],citta[j]);
              temperatura[i]=temperatura[j];
              strcpy(citta[j], string);
              temperatura[j]=temp;
    
    return;
    }
    quindi se faccio questo che mi hai detto ho risolto il problema?

  6. #6
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Quote Originariamente inviata da tommasoperilli Visualizza il messaggio
    inoltre non riesco a effettuare lo scambio dei valori delle temperature, ho solo dichiarato un vettore con dimensione 4 che sarà un vettore di appoggio per lo scambio
    Hai provato a guardare il mio post di prima? Puoi operare sull'array direttamente dall'interno della funzione, dato che il nome di un array non è altro che un puntatore all'array stesso. Se fai uno scambio alla volta (ad esempio con l'algoritmo di bubble sort) quella funzione dovrebbe essere sufficiente.

  7. #7
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    No non hai risolto il problema , ma avresti tutte le informazione per risolverlo .

    1) dal quel poco che conosco sul linguaggio c , non puoi copiare una stringa
    con un semplice = citta[i]= citta[j]; , ma devi usare la funzione strcpy()

    2) tu hai dichiarato le variabili contatore i e j globalmente , funzione ma non è necessario
    potrebbero essere locali e passate come parametro a una funzione

    3) la prima riga della matrice temp non contiene le temperature della prima riga
    della matrice citta

    4) non devi copiare una temperatura ma 4

    una possibile soluzione


    codice:
    
    
    void scambio(char citta[][15],int temperatura[][4],int i ,int j){
    
      /* visto che nella prima riga della matrice temp non ci sono le 
         temperature ma gli orari , le temperature saranno in  i+1 e j+1 
         una posizione avanti */
    
    char string[20];
         int temp[4],k=0;
              strcpy(string,citta[i]);//copio il nome citta  i
              for(k=0;k<4;k++)        //copio le temperature i       
                  temp[k]=temperatura[i+1][k];
              strcpy( citta[i],citta[j]); 
             for(k=0;k<4;k++)
                    temperatura[i+1][k]=temperatura[j+1][k];
              strcpy(citta[j], string);
             for(k=0;k<4;k++)
                   temperatura[j+1][k]=temp[k];
    
             return;
    }
    prova e se vuoi fammi sapere se funziona o vi sono errori ,
    comunque mi pare di capire che hai qualche lacuna , e dovresti approfondire meglio
    array e matrici e forse altro ....
    Tecnologia

  8. #8
    Allora:
    codice:
    void scambio(char citta[][15], int temp[][4]){     
    char string[20];
         int temp[4];
         int k=0;
              strcpy(string,citta[i]);//copio il nome citta  i
              for(k=0;k<4;k++){        //copio le temperature i       
                  temp[k]=temp[i+1][k];}
              strcpy(citta[i],citta[j]); 
             for(k=0;k<4;k++){
                    temp[i+1][k]=temp[j+1][k];}
              strcpy(citta[j], string);
             for(k=0;k<4;k++){
                   temp[j+1][k]=temp[k];
                   }
                   
             return;
    }
    mi da alcuni errori come:
    a function-definition is not allowed here before '{' token
    expected `,' or `;' before '{' token
    expected `}' at end of input
    expected `}' at end of input
    Ultima modifica di tommasoperilli; 19-04-2014 a 16:34

  9. #9
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Qui c'è qualche problema con le graffe a livello generale. Posta tutto il codice che lo guardiamo.

  10. #10
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Unico errore nella funzione che chiami temp il parametro e chiami temp una variabile locale
    sostituisci la variabile locale temp con t


    Gli errori che hai sono in altri punti del programma ........

    funzione senza errori di sintassi


    codice:
    
    void scambio(char citta[][15], int temp[][4]){ 
         char string[20];
         int t[4];
         int k=0;
              strcpy(string,citta[i]);//copio il nome citta  i
              for(k=0;k<4;k++){        //copio le temperature i       
                  t[k]=temp[i+1][k];}
              strcpy(citta[i],citta[j]); 
             for(k=0;k<4;k++){
                    temp[i+1][k]=temp[j+1][k];}
              strcpy(citta[j], string);
             for(k=0;k<4;k++){
                   temp[j+1][k]=t[k];
                   }
                   
             return;
    }
    se il programma non è un segreto , puoi postare l'intero programma , che cerchiamo gli errori
    Tecnologia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.