MasterDrive.it   
Vai indietro   MasterDrive.it > Software Development > C/C++



Rispondi
 
Strumenti della discussione Modalità di visualizzazione
Vecchio 10-01-2010, 13:26   #1 (permalink)
Nuovo della community

 
14 Messaggi

terry86 novizio della comunita' ( + 10 )
definire una matrice

Ciao,

come posso definire una matrice "RilevazioniSettimanali" fuori dal main di tipo "Sensore"(struttura).ho pensato di scrivere:

typedef struct{
int temperatura;
int...;
} Sensore;
typedef Sensore RilevazioniSettimanali[7][6];

ma poi non so come assegnare alle righe e alle colonne il tipo di dato!!!

terry86 non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-01-2010, 02:58   #2 (permalink)
Moderatore Globale

 L'avatar di M.A.W. 1968

 
316 Messaggi

M.A.W. 1968 e' una persona affidabile ( + 250 )M.A.W. 1968 e' una persona affidabile ( + 250 )M.A.W. 1968 e' una persona affidabile ( + 250 )
La sintassi per l'accesso a membri di strutture organizzate in array è identica alla dot notation normalmente utilizzata per le singole strutture.

Laddove quindi si usa
codice:
Sensore.temperatura = 25;
Allo stesso modo, si scriverà
codice:
RilevazioniSettimanali[3][0].temperatura = 27;
Tutto qui, se non si intende ricorrere a puntatori o strutture d'appoggio (che semplificano notevolmente la scrittura).

Voglio comunque sperare che tu stia studiando il linguaggio C su un serio testo di riferimento, nel quale queste banalità sintattiche sono chiarite in modo inequivocabile.

Il forum non può e non deve sostituire lo studio individuale degli elementi di base del linguaggio.
__________________
Tutti gli utenti sono pregati di prendere visione del Regolamento del Forum e di rispettarlo.

• "Die ganzen Zahlen hat der liebe Gott gemacht, alles andere ist Menschenwerk." (Leopold Kronecker)
• "A Mathematician is a machine for turning coffee into theorems." (Pal Erdös)
• Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.
M.A.W. 1968 non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-01-2010, 09:28   #3 (permalink)
Nuovo della community

 
14 Messaggi

terry86 novizio della comunita' ( + 10 )
Sto studiando dal libro consigliato dal prof:"C corso completo di programmazione" (Harvey M. Deitel).
La mia domanda non era questa..forse mi sono spiegata male!!!!so benissimo come accedere ad un array in una struttura..il problema è che sto svolgendo un esercizio che mi chiede di
Costruire un programma in C per la elaborazione di rilevazioni giornaliere di temperatura e umidità. In particolare si chiede di:
1.Definire GiornoSettimanale come tipo enumerativo con valori: lun, mar, mer, gio, ven, sab, dom.
2.Definire Provincia come tipo enumerativo con valori: Bari, Bat, Brindisi, Foggia, Lecce, Taranto.
3.Definire Valore come tipo enumerativo con valori: alto, basso.
4.Definire il tipo Sensore come struttura i cui campi sono temperatura di tipo reale e umidita di tipo Valore.
5.Definire il tipo RilevazioniSettimanali come matrice (7x6) di tipo Sensore le cui righe rappresentano le occorrenze distinte del tipo GiornoSettimanale e le colonne rappresentano le occorrenze distinte del tipo Provincia.
Il mio problema è il punto 5..nel mio studio non ho mai incontrato la definizione di una matrice fuori dal main..e vorrei sapere se esiste una procedura particolare.
Ho provato con:

typedef Sensore RilevazioniSettimanali[7][6];

ma poi ho problemi quando mando la matrice alle funzioni perchè il compilatore non riconosce il tipo RilevazioniSettimanali.
Se la richiesta non fosse quella io definirei la matrice di tipo sensore nel main e il problema sarebbe risolto.
Sono stata più chiara adesso?..grazie!!!
terry86 non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-01-2010, 09:37   #4 (permalink)
Neofita della community

 
118 Messaggi

neobaumuth novizio della comunita' ( + 10 )
Puoi sempre definire i tuoi tipi in un file header che poi includerai nel modulo principale, dopodichè puoi dichiarare quello che ti serve nel main.
__________________
"Fatti non foste per viver come bruti, ma per seguire virtute e conoscenza."
"Hack to learn, not to steal."
"In un mondo di ciechi, chi ha un occhio solo è un Re"
neobaumuth non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-01-2010, 09:54   #5 (permalink)
Nuovo della community

 
14 Messaggi

terry86 novizio della comunita' ( + 10 )
Non abbiamo studiato i file..siamo arrivati alle strutture e poi ci siamo fermati!!!non esiste nessun altro modo?
Io ho pensato che esiste, in analogia al caso dei vettori.
Se avessi dovuto definire un vettore invece che una matrice avrei scritto:
typedef Sensore RilevazioniSettimanali[7];
Non esiste un analogo?
terry86 non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-01-2010, 10:20   #6 (permalink)
Neofita della community

 
118 Messaggi

neobaumuth novizio della comunita' ( + 10 )
Non c'è bisogno di funzioni di files, se è quello che intendi. Comunque, tu puoi definire tutto quello che vuoi fuori dal main, poi dichiari l'occorrenza della tua variabile nel main.
Noto comunque solo ora una cosa che mi sembra un errore:
Dopo che tu dichiari la tua struttura e chiami il tipo Sensore, per crearne un'occorrenza basterà
codice:
Sensore RilevazioniSettimanali[7][6];
anzichè

codice:
typedef Sensore RilevazioniSettimanali[7][6];
__________________
"Fatti non foste per viver come bruti, ma per seguire virtute e conoscenza."
"Hack to learn, not to steal."
"In un mondo di ciechi, chi ha un occhio solo è un Re"
neobaumuth non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-01-2010, 10:29   #7 (permalink)
Nuovo della community

 
14 Messaggi

terry86 novizio della comunita' ( + 10 )
Ma ho bisogno di assegnare un nome al tipo di matrice in modo da poter definire una matrice (ad esempio tabulato) di tipo RilevazioniSettimanali nel main.
"tabulato" poi dovrà essere inviata alle funzioni.
terry86 non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-01-2010, 11:01   #8 (permalink)
Neofita della community

 
118 Messaggi

neobaumuth novizio della comunita' ( + 10 )
Ok, non ho il compilatore sotto mano per fare delle prove ma...che compilatore usi? Che errori ottieni quando compili? Puoi postare il codice completo per vedere meglio dove puo essere l'inghippo?
__________________
"Fatti non foste per viver come bruti, ma per seguire virtute e conoscenza."
"Hack to learn, not to steal."
"In un mondo di ciechi, chi ha un occhio solo è un Re"
neobaumuth non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-01-2010, 19:06   #9 (permalink)
Moderatore Globale

 L'avatar di M.A.W. 1968

 
316 Messaggi

M.A.W. 1968 e' una persona affidabile ( + 250 )M.A.W. 1968 e' una persona affidabile ( + 250 )M.A.W. 1968 e' una persona affidabile ( + 250 )
Quote:
Originariamente inviata da terry86 Visualizza il messaggio
Il mio problema è il punto 5..nel mio studio non ho mai incontrato la definizione di una matrice fuori dal main..e vorrei sapere se esiste una procedura particolare.
Ho provato con:

typedef Sensore RilevazioniSettimanali[7][6];

ma poi ho problemi quando mando la matrice alle funzioni perchè il compilatore non riconosce il tipo RilevazioniSettimanali.
Se la richiesta non fosse quella io definirei la matrice di tipo sensore nel main e il problema sarebbe risolto.
Sono stata più chiara adesso?..grazie!!!
Così va molto meglio, grazie.
Più informazioni si forniscono, maggiore è la speranza matematica di ottenere una risposta utile e risolutiva...

Il seguente sorgente è stato da me compilato ed eseguito con successo utilizzando separatamente BCC 5.5.1, Visual C++ Express 2009, Open Watcom:
codice:
#include <stdio.h>
#include <string.h>

typedef enum {lun, mar, mer, gio, ven, sab, dom} GiornoSettimanale;
typedef enum {Bari, Bat, Brindisi, Foggia, Lecce, Taranto} Provincia;
typedef enum {alto, basso} Valore;

typedef struct {
    float temperatura;
    Valore umidita;
} Sensore;

typedef Sensore RilevazioniSettimanali[7][6];

void InserisciDati(RilevazioniSettimanali tab)
{
    memset(tab, 0, sizeof(tab));

    tab[Bari][lun].temperatura = 27.1;
    tab[Bari][lun].umidita = alto;
    tab[Taranto][mar].temperatura = 29.3;
    tab[Taranto][mar].umidita = basso;
    tab[Foggia][mer].temperatura = tab[Bari][lun].temperatura + 2.9;
    tab[Foggia][mer].umidita = basso;
}

int main(void)
{
    RilevazioniSettimanali tabulato;

    InserisciDati(tabulato);
    
    printf("Bari    lun: temp %.2f°C, umidità %s\n",
           tabulato[Bari][lun].temperatura,
           (tabulato[Bari][lun].umidita == basso ? "bassa" : "alta"));
    
    printf("Taranto mar: temp %.2f°C, umidità %s\n",
           tabulato[Taranto][mar].temperatura,
           (tabulato[Taranto][mar].umidita == basso ? "bassa" : "alta"));

    printf("Foggia  mer: temp %.2f°C, umidità %s\n",
           tabulato[Foggia][mer].temperatura,
           (tabulato[Foggia][mer].umidita == basso ? "bassa" : "alta"));

    return (0);
}
__________________
Tutti gli utenti sono pregati di prendere visione del Regolamento del Forum e di rispettarlo.

• "Die ganzen Zahlen hat der liebe Gott gemacht, alles andere ist Menschenwerk." (Leopold Kronecker)
• "A Mathematician is a machine for turning coffee into theorems." (Pal Erdös)
• Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

Ultima modifica di M.A.W. 1968 : 11-01-2010 a 21:00.
M.A.W. 1968 non è in linea   Bookmark and Share Rispondi quotando
Rispondi

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilies sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato

Salto del forum


Tutti gli orari sono GMT +1. Attualmente sono le 21:51.


Powered by vBulletin versione 3.8.0
Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0

Valid XHTML 1.0 Transitional  Creative Commons License

Eccetto dove diversamente specificato, i contenuti pubblicati in questa comunità sono rilasciati sotto Licenza
Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia License.
La comunita' di MasterDrive.it non e' responsabile di eventuali imprecisioni presenti nelle pagine.