programma in c

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
christian88
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1648
Iscrizione: mercoledì 31 gennaio 2007, 15:34
Località: Cernusco sul naviglio
Contatti:

programma in c

Messaggio 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  ;D

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");
 }
Stilogo | MondoSviluppatori | ItalianDevTeam - Android
Errare è umano, ma per incasinare tutto ci vuole la password di root!!
Ubuntu user #19519
Avatar utente
origin of
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1028
Iscrizione: venerdì 30 giugno 2006, 17:04
Località: Lucca

Re: programma in c

Messaggio 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");
 }
Utente archlinux, ex utente ubuntu.
Contatto jabber: originof@jaim.at
MIO SITO: http://www.happycode.it
Avatar utente
Rospo Zoppo
Rampante Reduce
Rampante Reduce
Messaggi: 5291
Iscrizione: martedì 16 gennaio 2007, 20:35

Re: programma in c

Messaggio da Rospo Zoppo »

credo questo

Codice: Seleziona tutto

while (giorno<0||giorno>6) ;
vada corretto in

Codice: Seleziona tutto

while (giorno<1||giorno>6) ;
altrimenti se metti giorno = 0 che accade ?
Avatar utente
christian88
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1648
Iscrizione: mercoledì 31 gennaio 2007, 15:34
Località: Cernusco sul naviglio
Contatti:

Re: programma in c

Messaggio 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
Stilogo | MondoSviluppatori | ItalianDevTeam - Android
Errare è umano, ma per incasinare tutto ci vuole la password di root!!
Ubuntu user #19519
Avatar utente
More+
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 426
Iscrizione: venerdì 13 gennaio 2006, 17:19
Contatti:

Re: programma in c

Messaggio 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
Un blog scritto da un programmatore di insuccesso per coloro che aspirano a diventare tali:  http://programmatorepercaso.blogspot.com
Avatar utente
christian88
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1648
Iscrizione: mercoledì 31 gennaio 2007, 15:34
Località: Cernusco sul naviglio
Contatti:

Re: programma in c

Messaggio 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... ;D

ah dimenticavo...poi la stessa operazione fatta per "lunedì" devo farla rifare per tuta la settimana...per questo poi sarà sufficiente ripetere la funzione...
Ultima modifica di christian88 il lunedì 24 settembre 2007, 15:41, modificato 1 volta in totale.
Stilogo | MondoSviluppatori | ItalianDevTeam - Android
Errare è umano, ma per incasinare tutto ci vuole la password di root!!
Ubuntu user #19519
Avatar utente
More+
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 426
Iscrizione: venerdì 13 gennaio 2006, 17:19
Contatti:

Re: programma in c

Messaggio 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... ;D
tipico  ;)
ma perchè non imparano a dare esercizi che abbiano un senso, sarebbero più stimolanti per gli studenti.
Un blog scritto da un programmatore di insuccesso per coloro che aspirano a diventare tali:  http://programmatorepercaso.blogspot.com
Avatar utente
christian88
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1648
Iscrizione: mercoledì 31 gennaio 2007, 15:34
Località: Cernusco sul naviglio
Contatti:

Re: programma in c

Messaggio 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);
Stilogo | MondoSviluppatori | ItalianDevTeam - Android
Errare è umano, ma per incasinare tutto ci vuole la password di root!!
Ubuntu user #19519
Avatar utente
More+
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 426
Iscrizione: venerdì 13 gennaio 2006, 17:19
Contatti:

Re: programma in c

Messaggio 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

Codice: Seleziona tutto

void stampa_materia (int n)
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  8)

ciao
e divertiti
Un blog scritto da un programmatore di insuccesso per coloro che aspirano a diventare tali:  http://programmatorepercaso.blogspot.com
Avatar utente
christian88
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1648
Iscrizione: mercoledì 31 gennaio 2007, 15:34
Località: Cernusco sul naviglio
Contatti:

Re: programma in c

Messaggio 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)
Stilogo | MondoSviluppatori | ItalianDevTeam - Android
Errare è umano, ma per incasinare tutto ci vuole la password di root!!
Ubuntu user #19519
Avatar utente
christian88
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1648
Iscrizione: mercoledì 31 gennaio 2007, 15:34
Località: Cernusco sul naviglio
Contatti:

Re: programma in c

Messaggio 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
Stilogo | MondoSviluppatori | ItalianDevTeam - Android
Errare è umano, ma per incasinare tutto ci vuole la password di root!!
Ubuntu user #19519
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti