Pagina 1 di 1
programma in c
Inviato: domenica 23 settembre 2007, 17:57
da christian88
chiedo scusa fin da ora per la pessima figura che farò mostrandovi il mio programma ma sono ancora alle prime armi con questo linguaggio che spero in un futuro mi possa dare soddisfazioni
Ad ogni modo io dovrei creare un programma che "gestisca" un orario scolastico...precisamente il programma deve essere:
1.Scelta del giorno Lunedì-->Sabato
2.Stampa delle materie possibili per quel giorno
3.Scleta manuale delle 6 materie da inserire
4.Stampa dell'orario del giorno
so che per molti di voi sarà banale ma ho trovato parecchie difficoltà nella sua creazione e su alcuni punti non sono molto sicuro, specialmente su vettori e matrici...infatti ottengo errori proprio su qui passaggi...sapreste dirmi come dovrei fare per risolvere?
ps solo il Lunedi per ora è "sviluppato" parzialmente
ecco il programma:
Codice: Seleziona tutto
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int giorno,i,j;
char materia [5][13];
void materie (void);
main ()
{do{
printf ("Scegli un giorno della settimana:\n");
printf("\n1.Lunedi");
printf("\n2.Martedi");
printf("\n3.Mercoledi");
printf("\n4.Giovedi");
printf("\n5.Venerdi");
printf("\n6.Sabato\t");
scanf ("%d", & giorno);
}while (giorno<0||giorno>6) ;
switch (giorno)
{case 1:
{clrscr();
printf("Hai scelto Lunedi\n\n");
printf("Queste sono le materie disponibili:\n");
materie();
for (i=0;i<6;i++)
{printf ("\n\nInserisci la %d materia:", i+1);
scanf ("\n%s", materia[i]);
}
printf ("L'orario deciso è:\n");
printf ("%s", materia[i][j]);
break;
}
case 2:
{
clrscr();
printf("Hai scelto Martedi\n\n");
printf("Queste sono le materie disponibili:");
materie();
break;
}
case 3:
{
clrscr();
printf("Hai scelto Mercoledi\n\n");
printf("Queste sono le materie disponibili:");
materie();
break;
}
case 4:
{
clrscr();
printf("Hai scelto Giovedi\n\n");
printf("Queste sono le materie disponibili:");
materie();
break;
}
case 5:
{
clrscr();
printf("Hai scelto Venerdi\n\n");
printf("Queste sono le materie disponibili:");
materie();
break;
}
case 6:
{
clrscr();
printf("Hai scelto Sabato\n\n");
printf("Queste sono le materie disponibili:");
materie();
break;
}
}
getch();
}
void materie (void)
{
printf ("\n1.Ital");
printf("\n2.Mate");
printf("\n3.Biol");
printf("\n4.SdTe");
printf("\n5.Ingl");
printf("\n6.Stor");
printf("\n7.Fisi");
printf("\n8.Info");
printf("\n9.EdFi");
printf("\n10.Chim");
printf("\n11.Filo");
printf("\n12.Reli");
}
Re: programma in c
Inviato: domenica 23 settembre 2007, 20:05
da origin of
ma questo non va su linux....ci sono le librerie che usa windows..
Ora funziona a metà, è commentato dove ci sono degli errori...
Codice: Seleziona tutto
#include <stdio.h>
//librerie per creare il mygetch
#include <termios.h>
#include <unistd.h>
///
int giorno,i,j;
char materia [5][13];
void materie (void);
//il getch qua non esiste, su linux, quindi va creato
int mygetch( ) {
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
main ()
{do{
printf ("Scegli un giorno della settimana:\n");
printf("\n1.Lunedi");
printf("\n2.Martedi");
printf("\n3.Mercoledi");
printf("\n4.Giovedi");
printf("\n5.Venerdi");
printf("\n6.Sabato\t");
scanf ("%d", & giorno);
}while (giorno<0||giorno>6) ;
switch (giorno)
{case 1:
{ system("clear");
printf("Hai scelto Lunedi\n\n");
printf("Queste sono le materie disponibili:\n");
materie();
for (i=0;i<6;i++)
{printf ("\n\nInserisci la %d materia:", i+1);
scanf ("\n%s", materia[i]);
}
printf ("L'orario deciso è:\n");
//qui non ha senso, prima metti le materie nel vettore materia e poi le stampi utilizznado una matrice ??
printf ("%s", materia[i][j]);
break;
}
case 2:
{
system("clear");
printf("Hai scelto Martedi\n\n");
printf("Queste sono le materie disponibili:");
materie();
break;
}
case 3:
{
system("clear");
printf("Hai scelto Mercoledi\n\n");
printf("Queste sono le materie disponibili:");
materie();
break;
}
case 4:
{
system("clear");
printf("Hai scelto Giovedi\n\n");
printf("Queste sono le materie disponibili:");
materie();
break;
}
case 5:
{
system("clear");
printf("Hai scelto Venerdi\n\n");
printf("Queste sono le materie disponibili:");
materie();
break;
}
case 6:
{
system("clear");
printf("Hai scelto Sabato\n\n");
printf("Queste sono le materie disponibili:");
materie();
break;
}
}
mygetch();
}
void materie (void)
{
printf ("\n1.Ital");
printf("\n2.Mate");
printf("\n3.Biol");
printf("\n4.SdTe");
printf("\n5.Ingl");
printf("\n6.Stor");
printf("\n7.Fisi");
printf("\n8.Info");
printf("\n9.EdFi");
printf("\n10.Chim");
printf("\n11.Filo");
printf("\n12.Reli");
}
Re: programma in c
Inviato: domenica 23 settembre 2007, 20:09
da Rospo Zoppo
credo questo
vada corretto in
altrimenti se metti giorno = 0 che accade ?
Re: programma in c
Inviato: lunedì 24 settembre 2007, 14:23
da christian88
@Rospo_Zoppo
si hai ragione questo ho sbagliato a digitare
@origin_of
il programma deve funzionare sotto windows e non linux mi sono dimenticato di specificarlo
comunque oggi a scuola l'ho corretto con con questo:
Codice: Seleziona tutto
#include <conio.h>
#include <stdio.h>
#include <windows.h>
float V[12];
int ora, giorno, i,a;
void materie(void);
void stampa_materia(int);
void main()
{
do{
printf("menu giorni");
printf("\n1: lunedi");
printf("\n2: martedi");
printf("\n3: mercoledi");
printf("\n4: giovedi");
printf("\n5: venerdi");
printf("\n6: sabato");
printf("\nscegli il giorno:\t");
scanf("%d",& giorno);
}while(giorno<1||giorno>6);
switch (giorno)
{
case 1:
{
printf("hai scelto lunedi\t\n");
for(i=0;i<6;i++)
{
printf("scegli materia per %d ora:\t",i+1);
materie();
printf("\nscegli la materia che vuoi:\t");
scanf("%d",& V[i]);
void stampa_materia ();
}
break;
}
}
getch();
}
void materie (void)
{
clrscr();
printf("\n\n1.ita\n2.stor\n3.filo\n4.ing\n5.mate\n6.info\n7.fisi\n8.bio\n9.chimi\n10.sdt\n11.edfi\n12.rel");
}
void stampa_materia (int n)
{switch(n)
{case 1:{printf("ital");
break;}
case 2:{ printf("stor");
break;}
case 3:{ printf("filo");
break;}
case 4:{ printf("ingl");
break;}
case 5:{ printf("mate");
break;
}
case 6:{printf("biol");
break;
}
case 7:
{printf("fisi");
break;}
case 8:
{printf("chim");
break;}
case 9:
{printf("sdte");
break;}
case 10:
{printf("edfi");
break;}
case 11:
{ printf("reli");
break;}
case 12:
{printf("info");
break;
}
}
}
però quando lo faccio partire ottengo errori di output...volevo sapere se almeno teoricamente è giusto il programma scritto in questo modo...
grazie
Re: programma in c
Inviato: lunedì 24 settembre 2007, 14:55
da More+
[quote author=christian88 link=topic=118492.msg781425#msg781425 date=119063663
però quando lo faccio partire ottengo errori di output...volevo sapere se almeno teoricamente è giusto il programma scritto in questo modo...
[/quote]
dovresti analizzare gli errori per correggere il programma ..servono a questo.
comunque ti do una dritta: controllare la riga
void stampa_materia (); (la chiamata alla funzione)
poi per il giudizio:
se almeno teoricamente è giusto il programma
non saprei dirti, perchè un programma così (se ho capito bene) non ha molto senso, in quanto chiedi all'utente il giorno (ti sei dimenticato di dare la possibilità di uscire dal programma), poi le materie in ordine dell'orario e come output gli restituisci le materie che ha scelto ...non c'è bisogno di un computer per fare quest'elaborazione ???
buon lavoro
Ciao
More
Re: programma in c
Inviato: lunedì 24 settembre 2007, 15:38
da christian88
ok grazie controllerò la funzione...
credo anche io che sia un programma senza senso ma il mio prof di info vuole questo programma per settimana prossima...purtroppo devo farlo anche se non ha senso...
ah dimenticavo...poi la stessa operazione fatta per "lunedì" devo farla rifare per tuta la settimana...per questo poi sarà sufficiente ripetere la funzione...
Re: programma in c
Inviato: lunedì 24 settembre 2007, 15:54
da More+
christian88 ha scritto:
ok grazie controllerò la funzione...
non la funzione ma la sintassi della chiamata alla funzione
christian88 ha scritto:
credo anche io che sia un programma senza senso ma il mio prof di info vuole questo programma per settimana prossima...purtroppo devo farlo anche se non ha senso...
tipico

ma perchè non imparano a dare esercizi che abbiano un senso, sarebbero più stimolanti per gli studenti.
Re: programma in c
Inviato: lunedì 24 settembre 2007, 16:01
da christian88
More+ ha scritto:
tipico

ma perchè non imparano a dare esercizi che abbiano un senso, sarebbero più stimolanti per gli studenti.
guarda fino ad ora l'unico programma che
forse era abbastanza decente è stato il programma sul cellulare dove abbiamo dovuto simulare un funzionamento corretto ma per il resto gli altri sono stati
ridicoli...ad ogni modo, in che senso la sintassi di richiamo?dovrei inserire un int nelle parentesi?
void stampa_tabella(int);
Re: programma in c
Inviato: lunedì 24 settembre 2007, 16:22
da More+
christian88 ha scritto:
More+ ha scritto:
tipico

ma perchè non imparano a dare esercizi che abbiano un senso, sarebbero più stimolanti per gli studenti.
guarda fino ad ora l'unico programma che
forse era abbastanza decente è stato il programma sul cellulare dove abbiamo dovuto simulare un funzionamento corretto ma per il resto gli altri sono stati
ridicoli...ad ogni modo, in che senso la sintassi di richiamo?dovrei inserire un int nelle parentesi?
void stampa_tabella(int);
ahi ahi ...dovresti ripassare le funzioni
tu hai dichiarato correttamente la funzione
ciò significa che da essa non ritornerà nessun valore, quindi
void
si chiama
stampa_materia
e gli passi un solo parametro
int (non facoltativo)
quindi se devi chiamare la suddetta funzione dovrai:
- utilizzare il nome esatto di come l'hai dichiarata
- se restituisce un valore catturarlo con una variabile adeguata (ES: valore_di_ritorno = funzione() ..ma non è il tuo caso perchpè hai dichiarato che è void)
- e passare in ordine tutti i parametri richiesti!!!!
quindi la tua funzione la devi chiamare così:
stampa_materia(parametro);
dove parametro è ciò che vuoi passare e credo che tu voglia passare quello che l'utente digita
e qui ci sarebbe un altro errore: inserisci i dati in un array Float mentre il parametro da passare è int
...comunque per come l'hai scritto tu è completamente inutile e sprecato usare un array per stoccare i dati, visto che fai "elaborare" direttamente i valori inseriti.
ma l'esercizio è meglio che lo fai tu! altrimenti perde la sua utilità , visto che già non ha un senso pratico
ciao
e divertiti
Re: programma in c
Inviato: lunedì 24 settembre 2007, 16:59
da christian88
ok grazie dei suggerimenti, spero di riuscire a metterli in pratica!
vedo che sei molto ferrato su questo linguaggio di programmazione! (good)
grazie ancora!! (b2b)
Re: programma in c
Inviato: sabato 29 settembre 2007, 17:26
da christian88
Seguendo i vostri condigli ho provato a sistemare un po' il mio programmino e ho fatto qualche passo avanti ma non l'ho sistemato del tutto...
Vi faccio un riassunto del prog...
1.Scelgo il giorno della settimana
2.Vedo le materie disponibili
3.Scelgo la 6 materie per il lunedì
4.Stampo in sequenza le 6 materie scelte
beh il mio problema è che non riesco a fare questo punto 4...o meglio le materie me le stampa ma non alla fine ma durante la digitazione delle altre...io premo 1(italiano) do invio e mi stampa direttamente la materie con la richiesta del secondo inserimento...
questo è il programma:
Codice: Seleziona tutto
#include <stdio.h>
int V[12];
int ora, giorno, i,a;
void materie(void);
void stampa_materia(int);
main()
{
do{
system("clear");
printf("menu giorni");
printf("\n1: lunedi");
printf("\n2: martedi");
printf("\n3: mercoledi");
printf("\n4: giovedi");
printf("\n5: venerdi");
printf("\n6: sabato");
printf("\nscegli il giorno:\t");
scanf("%d",& giorno);
}while(giorno<1||giorno>6);
switch (giorno)
{
case 1:
{
for(i=0;i<6;i++)
{
printf ("Ecco la lista delle materie disponibili per Lunedi");
materie();
printf("\nscegli la %d materia:\t", i+1);
scanf("%d",& V[i]);
stampa_materia (V[i]);
}
break;
}
case 2:
{
for(i=0;i<6;i++)
{
printf ("Ecco la lista delle materie disponibili per Martedi");
materie();
printf("\nscegli la %d materia:\t", i+1);
scanf("%d",& V[i]);
stampa_materia (V[i]);
}
break;
}
case 3:
{
for(i=0;i<6;i++)
{
printf ("Ecco la lista delle materie disponibili per Mercoledi");
materie();
printf("\nscegli la %d materia:\t", i+1);
scanf("%d",& V[i]);
stampa_materia (V[i]);
}
break;
}
case 4:
{
for(i=0;i<6;i++)
{
printf ("Ecco la lista delle materie disponibili per Giovedi");
materie();
printf("\nscegli la %d materia:\t", i+1);
scanf("%d",& V[i]);
stampa_materia (V[i]);
}
break;
}
case 5:
{
for(i=0;i<6;i++)
{
printf ("Ecco la lista delle materie disponibili per Venerdi");
materie();
printf("\nscegli la %d materia:\t", i+1);
scanf("%d",& V[i]);
stampa_materia (V[i]);
}
break;
}
case 6:
{
for(i=0;i<6;i++)
{
printf ("Ecco la lista delle materie disponibili per Sabato");
materie();
printf("\nscegli la %d materia:\t", i+1);
scanf("%d",& V[i]);
stampa_materia (V[i]);
}
break;
}
getch();
}
}
void materie (void)
{
system("clear");
printf("\n\n1.ita\n2.stor\n3.filo\n4.ing\n5.mate\n6.info\n7.fisi\n8.bio\n9.chimi\n10.sdt\n11.edfi\n12.rel");
}
void stampa_materia (int n)
{
switch(n)
{case 1:
{
printf("ital");
break;
}
case 2:{ printf("stor");
break;
}
case 3:{ printf("filo");
break;}
case 4:{ printf("ingl");
break;}
case 5:{ printf("mate");
break;
}
case 6:{printf("info");
break;
}
case 7:
{printf("fisi");
break;}
case 8:
{printf("bio");
break;}
case 9:
{printf("chim");
break;}
case 10:
{printf("sdt");
break;}
case 11:
{ printf("edfi");
break;}
case 12:
{printf("reli");
break;
}
}
}
ho provato a togliere la funzione dal ciclo for, cosa che mi sembrava giusta visto che non termina finchè non raggiunge la fine degli inserimenti, ma quando la metto fuori da esso il terminale mi restituisce un errore...
sapreste aiutarmi?
grazie