Ordinamento linguaggio c

di Anonimizzato28512 il
18 risposte
Ragazzi qualcuno sa come ordinare questo programma?

#include <stdio.h>
#include <stdlib.h>

typedef char mese[20];
typedef struct {
 int minuto;
 int ora;
 int giorno;
 mese month;
 int anno;
 } data;

typedef struct {
int n_pagina;
char testo[30];
}PaginaAgenda;


void funzione_tempo(){
mese mesi[12] = {"Gennaio", "Febbraio", "Marzo",
"Aprile", "Maggio","Giugno",
"Luglio","Agosto","Settembre",
"Ottobre","Novembre", "Dicembre"};	
int i, currM, currMonthDays;
data input;	
printf("Inserire la data (formato dd/h:m/mm/yyyy): ");
scanf(" %2d/%2d:%2d/%2d/%4d",&input.giorno,&input.ora,&input.minuto,&currM, &input.anno);
// CASO 30 gg
if(currM == 4 || currM == 6 || currM == 9 || currM == 11)
currMonthDays = 30;
// CASO 31 gg
else if(currM != 2)
currMonthDays = 31;
// CASO FEBBRAIO ANNO BISESTILE
else if((input.anno % 4 == 0 && input.anno % 100 != 0) || input.anno % 400 == 0)
currMonthDays = 29;
// CASO FEBBRAIO NON BISESTILE
else
currMonthDays = 28;
strcpy(input.month, mesi[currM-1]);
printf("\n\nData immessa: \n\tGiorno:  %d\n\tOra: %d\n\tMinuto: %d\n\tMese: %s\n\tAnno: %d\n\n",input.giorno,
input.ora,input.minuto,input.month,input.anno);	
}




void funzione_agenda(){
int n=3; int premi=1;
PaginaAgenda Agenda[n]; // Agenda per 1 mese
int i=0; char text[30];
//Lettura appuntamenti.
Agenda[i].n_pagina=(i+1);
printf("Inserisci l'appuntamento per il giorno %d: ", (i+1));
scanf("%s",text);
strcpy(Agenda[i].testo,text);
//Stampo agenda.
printf("\nVisualizzo l'agenda\n");
printf("\nPagina %d \n", Agenda[i].n_pagina);
printf("Appuntamento %s \n", Agenda[i].testo);
}



int main(){
int agendadipagine=3;
int k;

for(k=0;k<agendadipagine;k++){
funzione_tempo();
funzione_agenda();
}






	return 0;
}

18 Risposte

  • Si, certamente
  • Devi ordinare il programma?
  • Si
  • E' possibile ordinare questo programma? Anche per ora? E se si quale algoritmo dovrei usare?
  • Sì ma in italiano che vuol dire?
    Devi ordinare l'agenda degli appuntamenti per data e ora?
  • oregon ha scritto:


    Devi ordinare il programma?
    Nel senso di ordinarlo su Amazon?
  • Puoi indentare meglio il codice cortesemente?
    Seconda cosa, prima di postare codice, dovresti descrivere quello che dovrebbe fare il codice in esecuzione.
  • Allora l'esercizio è questo:
    Scrivere un programma che sia in grado di gestire l'agenda di uno studente. Ogni appuntamento
    indica l'ora e una breve descrizione dello stesso. Possono esserci piu' appuntamenti nello stesso
    giorno. L’utente immette gli appuntamenti tramite tastiera.
    Gli impegni in agenda possono essere immessi in modo disordinato (ad esempio e’ possibile
    immettere l’impegno per giovedi’ 20 e successivamente l’impegno per lunedi’ 4) ma l’agenda deve
    stampare a video gli impegni in ordine di data e di ora.
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef char mese[20];
    typedef struct {
     int minuto;
     int ora;
     int giorno;
     mese month;
     int anno;
     } data;
     
    typedef struct {
    int n_pagina;
    char testo[30];
    }PaginaAgenda;
     
     
    mese mesi[12] = {"Gennaio", "Febbraio", "Marzo",
    "Aprile", "Maggio","Giugno",
    "Luglio","Agosto","Settembre",
    "Ottobre","Novembre", "Dicembre"}; 
    data input;
     
     
     
     
    void funzione_tempo(){
    int i, currM, currMonthDays;
    printf("Inserire la data (formato dd/h:m/mm/yyyy): ");
    scanf(" %2d/%2d:%2d/%2d/%4d",&input.giorno,&input.ora,&input.minuto,&currM, &input.anno);
    // CASO 30 gg
    if(currM == 4 || currM == 6 || currM == 9 || currM == 11)
    currMonthDays = 30;
    // CASO 31 gg
    else if(currM != 2)
    currMonthDays = 31;
    // CASO FEBBRAIO ANNO BISESTILE
    else if((input.anno % 4 == 0 && input.anno % 100 != 0) || input.anno % 400 == 0)
    currMonthDays = 29;
    // CASO FEBBRAIO NON BISESTILE
    else
    currMonthDays = 28;
    strcpy(input.month, mesi[currM-1]);
    printf("\n\nData immessa: \n\tGiorno:  %d\n\tOra: %d\n\tMinuto: %d\n\tMese: %s\n\tAnno: %d\n\n",input.giorno,
    input.ora,input.minuto,input.month,input.anno);
    }
     
     
     
     
    void funzione_agenda(){
    int a;
    PaginaAgenda Agenda[a]; // Agenda per 1 mese
    char text[30];
    //Lettura appuntamenti.
    Agenda[a].n_pagina=(a);
    printf("Inserisci l'appuntamento per il giorno %d: ", (a));
    scanf("%s",text);
    strcpy(Agenda[a].testo,text);
    //Stampo agenda.
    printf("\nVisualizzo l'agenda\n");
    printf("\nPagina %d \n", Agenda[a].n_pagina);
    printf("Appuntamento: %s \n data: Giorno:%d\t Ora:%d\t Minuto:%d\t Mese:%s\t Anno:%d\t\n", Agenda[a].testo,input.giorno,
    input.ora,input.minuto,input.month,input.anno);
    }
     
    //algoritmo di ordinamento.
     
     
     
     
    int main(){
    int agendadipagine=3;
    int k;
     
    for(k=0;k<agendadipagine;k++){
    funzione_tempo();
    funzione_agenda();
    }
        return 0;
    }
  • Ora dovrei ordinare per data gli appuntamenti
  • Ok ora va meglio, anche se non è indentato. Comunque il codice è sbagliato, non c'è logica. Eseguilo tu a matita e vedi cosa ti esce.

    Un consiglio avanzato per la gestione dei mesi, esiste un tipo Enum in C.
  • Quindi devo riscrivere tutto il codice?
  • Andiamo per passi. Funzione_tempo cosa dovrebbe fare? fa quello che pensi? testa sul foglio o a mente.
  • Devi separare il problema in due parti.

    La prima parte consiste nell'assegnare un numero intero univoco a una data e ora, ad esempio il numero di minuti passati dall'inizio dell'anno 2000, di modo che questi interi assegnati rispettino l'ordinamento cronologico delle date. Ci sono molte formule possibili, se vuoi usare qualcosa di standard c'è la funzione time() in time.h, che ti dà il numero di secondi passati dall'inizio del 1970 (se non ricordo male). Io però proverei a scrivere una formula da solo.

    La seconda parte consiste nell'ordinare questi interi univocamente assegnati alle date. Ci sono tantissimi algoritmi di sort, solitamente si inizia con il Bubble Sort. Il forum è strapieno di esempi a riguardo. Anche qui lo standard mette a disposizione qsort() in stdlib.h, ma è sempre meglio fare da zero quando si impara
  • Ok grazie ora riscrivo e cerco di usare i vostri consigli e riposto il codice
Devi accedere o registrarti per scrivere nel forum
18 risposte