Accedi per seguire   
Seguaci 0
spiug

Esercitazione 2

8 messaggi in questa discussione

Ecco altri semplici (per voi <_< ) esercizi per casa affibbiatomi dall'uni...

Esercizio 1:

Scrivere un programma che calcoli (e stampi a video) il voto finale dell'esame di Programmazione dopo aver chiesto all'utente di inserire il voto della prova teorica, quello della prova pratica e il bonus per le esercitazioni.

Osservazioni:

• il programma deve controllare che i voti della prova pratica e di quella teorica siano compresi tra 18 e 30

• il programma deve controllare che il bonus per le esercitazioni sia un numero compreso tra 0 e 2

• il voto finale deve essere ottenuto facendo la media (arrotondata per difetto) della pratica con la teoria e aggiungendo poi il bonus per le esercitazioni.

Come l'ho risolto:

#include <stdio.h>

int main () {

int v_teo, v_pra, v_bon, v_fin;


do 
{printf ("Dammi il voto della prova teorica\n");
scanf (" &d",&v_teo);
if ((v_teo >= 18) && (v_teo <= 30))
	printf("bene, ora passiamo al prossimo dato da inserire\n");
else
	printf("NOO, il numero che mi hai dato non và bene...ora dovrai riscriverlo\n");}
while ((v_teo >= 18) && (v_teo <= 30));


do 
{printf ("Dammi il voto della prova pratica\n");
scanf (" &d",&v_pra);
if ((v_pra >= 18) && (v_pra <= 30))
	printf("bene, ora passiamo al prossimo dato da inserire\n");
else
	printf("NOO, il numero che mi hai dato non và bene...ora dovrai riscriverlo\n");}
while ((v_pra >= 18) && (v_pra <= 30));


do 
{printf ("Dammi il voto del bonus\n");
scanf (" &d",&v_bon);
if ((v_bon >= 0) && (v_bon <= 2))
	printf("bene, al più presto avrai la risposta\n");
else
	printf("NOO, il numero che mi hai dato non và bene...ora dovrai riscriverlo\n");}
while ((v_bon >= 0) && (v_bon <= 2));

v_fin = ((v_pra+v_teo)/2)+v_bon;

printf("Il voto finale del tuo esame è stato %d",v_fin);

}

...però una volta dato il primo valore mi esce...dov'è l'inghippo??

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Esercizio 2

Scrivere un programma che, letti da tastiera tre numeri interi specificanti una data (anno, numero del mese nell'anno e numero del giorno nel mese), stabilisca se la data è valida o meno e visualizzi un messaggio di conseguenza. Si tenga conto del fatto che l'anno inserito possa essere bisestile.

E io l'ho risolto così:

#include <stdio.h>

int main () {

int gg, mm, aa, b;

printf ("Dimmi che anno vuoi\n");
scanf (" %d",&aa);
printf ("Dammi un mese\n");
scanf (" %d",&mm);
printf ("Dammi i giorni\n");
scanf (" %d",&gg);


if (aa!=0)
 {if (((aa % 4 == 0) && (aa % 100 != 0)) || (aa % 400 == 0))
   	{printf ("l'anno %d è bisestile\n",aa);
	 b=1;}
  else 
 	{printf ("l'anno %d NON è bisestile\n",aa);
	 b=0;};}
else 
 printf ("Anno sbagliato, quindi la data non è valida!\n");



if ( mm==0 || (mm<=0 || mm>12))
  printf ("Mese sbagliato, quindi la data non è valida!!\n");



if (b==1 && mm==2)
  while ( gg==0 || (gg<=0 || gg>29))
		   printf ("Giorno sbagliato, quindi la data non è valida!!\n"); 

if (b==0 && mm==2)
  if ( gg==0 || (gg<=0 || gg>29))
		   printf ("Giorno sbagliato, quindi la data non è valida!!\n");			   


if ( mm==1 || mm==3 || mm==5 || mm==7 || mm==8 || mm==10 || mm==12 )   
   if ( gg==0 || (gg<=0 || gg>31))
		   printf ("Giorno sbagliato, quindi la data non è valida!!\n");
else 
   if ( gg==0 || (gg<=0 || gg>30))
		   printf ("Giorno sbagliato, quindi la data non è valida!!\n"); 

printf ("OK, a questo punto sai se hai inserito una data corretta o meno: %d %d %d",gg,mm,aa);
scanf (" /d",&b);
}

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Esercizio 3

Scrivere un programma che visualizzi il seguente listino:

MENU

1) Pizzetta 3.10

2) Toast 1.90

3) Caramelle 0.95

4) Acqua 0.60

5) Caffè 0.75

6) Tramezzino 1.00

quindi legga una sequenza di interi corrispondenti ai prodotti scelti dall'’utente (si assuma che la sequenza termini con -1) e visualizzi una scritta corrispondente alla spesa totale.

E così funziona perfettamente:

#include <stdio.h>

int main () {

int opz;
double p_piz, p_toa, p_car, p_acq, p_caf, p_tra, tot;

p_piz=3.10;
p_toa=1.90;
p_car=0.95;
p_acq=0.60;
p_caf=0.75;
p_tra=1.00;

printf ("1) Pizzetta   %f\n",p_piz);
printf ("2) Toast	  %f\n",p_toa);
printf ("3) Caramelle  %f\n",p_car);
printf ("4) Acqua	  %f\n",p_acq);
printf ("5) Caffè	  %f\n",p_caf);
printf ("6) Tramezzino %f\n",p_tra);

opz=0;
tot=0;
printf ("Immetti ora la lista di pezzi da lei scelta\n");

while (opz!=(-1)){
scanf (" %d",&opz);
switch (opz){
case 1:
	 tot+=p_piz; 
	 break;
case 2:
	 tot+=p_toa;
	 break;
case 3:
	 tot+=p_car;
	 break;
case 4:
	 tot+=p_acq;
	 break;
case 5:
	 tot+=p_caf;
	 break;
case 6:
	 tot+=p_tra;
	 break;
default:
	 if (opz!=(-1)) printf ("Il numero inserito non corrisponde a nessun pezzo\n");
	 }}

printf ("TOTALE: %f",tot);

scanf ("%d",&opz);


}

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
...però una volta dato il primo valore mi esce...dov'è l'inghippo??

Sono sbagliate le condizioni dei cicli do-while, nella prima ad esempio gli dici di ripetere finchè il voto è compreso tra 18 e 30 (ossia il voto che cerchi), invece deve farlo se il voto inserito non è corretto, ossia quando è minore di 18 O maggiore di 30. Ecco quindi le correzioni:

...
while ((v_teo < 18) || (v_teo > 30));
...
...
while ((v_pra < 18) || (v_pra > 30));
...
...
while ((v_bon < 0) || (v_bon > 2));
...

:)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Sono sbagliate le condizioni dei cicli do-while, nella prima ad esempio gli dici di ripetere finchè il voto è compreso tra 18 e 30 (ossia il voto che cerchi), invece deve farlo se il voto inserito non è corretto, ossia quando è minore di 18 O maggiore di 30. Ecco quindi le correzioni:

...
while ((v_teo < 18) || (v_teo > 30));
...
...
while ((v_pra < 18) || (v_pra > 30));
...
...
while ((v_bon < 0) || (v_bon > 2));
...

:P

...in effetti ora che ci penso hai ragione...MA se faccio le tue correzzioni il primi ciclo mi loppa all'infinito saltandomi l'inserimento per qualsiasi valore che dò la prima volta... :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Nelle scanf per indicare il tipo di dato hai usato il simbolo & (E commerciale) invece del simbolo % (percentuale) :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Nelle scanf per indicare il tipo di dato hai usato il simbolo & (E commerciale) invece del simbolo % (percentuale) :P

Accidenti...ma dove ho la testa?!

Per il primo ciclo ho sbagliato il carattere e nel fare il copia-incolla l'errore si è diffuso...strano che non me lo abbia segnalato...

COME AL SOLITO....GRAZIE BUG!! :up1:

Bene...e anche questi sono corretti e pronti per la consegna... :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Di niente ;-)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per partecipare

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!


Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.


Accedi Ora
Accedi per seguire   
Seguaci 0