Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
L funzione strncat() serve a concatenare due vettori di char.
Come già detto devi implementare un algoritmo di ordinamento (esempio https://it.wikipedia.org/wiki/Bubble_sort).
Ovviamente gli scambi di posizione, quando necessari, vanno fatti contemporaneamente sui due vettori, tra gli stessi indici.
conta che sono in 3superiore, e sinceramente ho più dubbi che certezze, e sinceramente un algoritmo di ordinamento, bhe non saprei nemmeno da dove iniziare per farlo
Se ti è stato assegnato un esercizio di ordinamento, significa che gli strumenti teorici per risolverlo ti sono stati già dati.
Ti consiglio di fare più domande al tuo insegnante.
Ps.: Chi ti ha consigliato il Dev-c++ ?
Esistono ambienti di sviluppo più aggiornati : microsoft visual studio o code::bloks
Magari scrivo una cosa che didatticamente non ha senso, però non sarebbe più sensato usare delle struct? Se non le hai ancora studiate, cercale sul libro, non sono difficili da capire e in questo caso ti semplificherebbero parecchio la vita!
In pratica, una struct è un insieme di variabili raggrupate in un unico "blocco" che puoi trattare come un tutt'uno. Userei la metafora di uno scatolone: dentro ci metti quel che ti pare, quando lo chiudi è un unico scatolone e lo puoi maneggiare come un tutt'uno, ogni volta che ti serve puoi guardarci dentro e scoprire che quel che ci avevi messo è ancora lì, immutato.
Nel tuo caso, invece di creare due vettori da gestire in parallelo, potresti crearne uno solo che assicura "in automatico" la coerenza tra il nome e la data (a meno che ti sia stato esplicitamente detto di fare diversamente).
Per agevolare l'ordinamento delle date, invece, potresti usare le union (altro costrutto che non so se puoi o non puoi usare, né se lo conosci oppure no).
Una union è un po' come una struct, ma "impacchettata" in modo che i suoi elementi si sovrappongano, si fondano in un tutt'uno. Ad esempio, se organizzi la tua data in forma numerica (non come stringa!) con anno, mese e giorno, in una singola struct...
( ... )
Lascia perdere le union ! La loro caratteristica è appunto quella di sovrapporrei i dati.
Esempio:
Codice sorgente - presumibilmente C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#define LMAX_NOME 31
#define QDATI 5
typedefstruct
{
uint16_t anno;
uint8_t mese;
uint8_t giorno;
}data_struct;
typedefunion{
uint32_t data_long;
data_struct data;
}data_union ;
typedefstruct{
char nome[LMAX_NOME+1];
data_union data;
}dato_struct;
void compila_dato( dato_struct *dato, constchar*nome, int a, int m, int g )
{
// sarebbe bene controllare la validita' dei parametri...
Questo mi stupisce! E' come se il giorno venisse considerato prevalente sull'anno, ovvero come se nell'uint32_t di data_union i dati venissero "inglobali" non nell'ordine anno, mese, giorno ma in quello giorno, mese, anno! Infatti, se nella data_struct inverto l'ordine dei campi le cose vanno come mi sarei aspettato. Perché succede una cosa del genere?
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
A me non stupisce che ti stupisca, dato che ho sempre detto che scrivere codice senza avere studiato le basi non fa altro che portare a problemi.
Cerca
little-endian
e studia l'argomento. Da questo capirai.
Ultima modifica effettuata da nessuno il 20/01/2018 alle 14:38
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à.
Avevo immaginato che avesse a che fare con la endianness (i "sintomi" erano quelli di uno scambio di posizione dei byte), però non essendo sicuro ho preferito esprimermi in forma dubitativa.
Quest'altra soluzione funziona... chissà se c'è anche qui qualche "errore occulto".
Ultima modifica effettuata da AldoBaldo il 20/01/2018 alle 15:13
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
A me non stupisce che ti stupisca, dato che ho sempre detto che scrivere codice senza avere studiato le basi non fa altro che portare a problemi.
Cerca
little-endian
e studia l'argomento. Da questo capirai.
Usare le union in modo inappropriato è sempre un pericolo. A seconda dei processori, la codifica può essere big-endian, little-endian o middle-endian. Quindi generare risultati diversi su macchine diverse.
Però con time.h sei "confinato" entro i limiti imposti dalla data d'inizio del conteggio (se non ricordo male collocata nel 1970) e quelli imposti dalle dimensioni del tipo time_t (a 32 bit siamo prossimi alla "scadenza").
Marco: "Usare le union in modo inappropriato è sempre un pericolo. A seconda dei processori, la codifica può essere big-endian, little-endian o middle-endian. Quindi generare risultati diversi su macchine diverse."
Ho ben visto! Il che dimostra che partecipare alle discussioni nei forum è utile, perché può indurre a puntare lo sguardo su qualcosa che magari leggendo i libri era sfuggito (non siamo macchine). Da oggi starò più attento a quel tipo di errore. Prima o poi sicuramente prenderò coscienza di altri possibili errori, e così via "finché morte non ci separi". Tanto la perfezione non è di questo mondo.
Ultima modifica effettuata da AldoBaldo il 20/01/2018 alle 15:19
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.