|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
Ringrazio per questi mega discorsi molto interessanti, che però non riesco ancora a comprendere appieno.
Grazie per il programma svolto, ma volevo chiedere delle cose: - lo stesso programma non si può svolgere con cicli while? - ho provato a compilare l'ultima versione di euphyllia87, ma facendo i test con 40 e 50 ore lavorative a 360€, il programma mi da in output 1.#R; non è giusto, vero?
__________________
IMPOSSIBLE IS NOTHING |
|
|
|
|
|
#22 | |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
Strano, ieri l ho provato l'ultima volta sulla mia macchina è funziona senza problemi. è quell'R che non mi convince. Per quanto riguarda il while...permette l'esecuzione reiterativa di un blocco di istruzioni finché una certa condizione rimane vera. Come la implementeresti?
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
|
#23 |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
Sì, a video come risultato di stampa, mi da 1.#R...
Il fatto che forse a te andava e a me no, sarà che facendo girare lo stesso programma con macchine diverse cambia, oppure sarà per il compilatore diverso.. Il fatto di implementare il while con un blocco si istruzioni finchè una non è vera, era ed è il mio reale problema, cioè non so come poterlo fare..
__________________
IMPOSSIBLE IS NOTHING |
|
|
|
|
|
#24 | |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
Iniziare il programma intero con un while finche la condizione delle ore non è verificata... potrebbe essere una soluzione, ma onestamente lo trovo poco produttivo (sotto ogni aspetto).
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
|
#25 | |||
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Quote:
Dai un occhiata al K&R (scritto da colui che ha ideato e implementato il C) e allo standard ANSI: non cè nessun riferimento a procedure. Quote:
Basta che guardi l'esempio nel primo post - con dei valori di 360 e 38 il risultato dovrebbe essere 384, ma il tuo programma restituisce 380, mentre con dei valori di 360 e 50 il risultato dovrebbe essere 540, ma il tuo programma restituisce 500. Quote:
Ecco un esempio corretto di come andrebbe risolto l'esercizio: Codice:
#include <stdio.h>
int main()
{
float sal, orario;
int ore, diff12 = 0, diff15 = 0;
printf("Inserire il salario settimanale dell’impiegato [Euro]: ");
scanf("%f", &sal);
orario = sal / 36;
printf("Inserire il numero di ore lavorate: ");
scanf("%d", &ore);
if (ore > 46)
{
diff15 = ore - 46;
sal += diff15 * orario * 1.5;
ore -= diff15;
}
if (ore > 36)
{
diff12 = ore - 36;
sal += diff12 * orario * 1.2;
ore -= diff12;
}
printf("Salario per questa settimana: %.0f\n", sal);
if (diff12 > 0)
printf("Numero di ore pagate a 1.2 volte il salario di base: %d\n", diff12);
if (diff15 > 0)
printf("Numero di ore pagate a 1.5 volte il salario di base: %d\n", diff15);
return 0;
}
|
|||
|
|
|
|
|
#26 |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Io ho pensato di risolverlo in un altra maniera.
Il K&R intendi di Ritchie? Strano però che su 2 libri universitari che ho letto e pure il docente universitario introduce alle procedure... che l'ANSI C non ne parli? Dove posso trovare l'elenco DI TUTTE le regole semantiche/sintattiche dell'ANSI C?
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
#27 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
|
|
|
|
|
|
#28 | |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
Per le procedure che dico a tutti quei docenti/libri ecc che sostengono esistere nel C?
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
|
#29 | |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
Quote:
Però, dato che vorrei capirci bene sulle cose devo fare, non mi sono accontetato e, sulla falsa riga del tuo, ne ho fatto uno io ex-novo, come l'avrei fatto io, però naturalmente non mi da quello che vorrei. Questo Codice:
#include <stdio.h>
int main()
{
float euro, euro12, euro15, ore, ore12, ore15;
printf("Inserire il salario settimanale dell’impiegato [Euro]: ");
scanf("%f", &euro);
printf("Inserire il numero di ore lavorative: ");
scanf("%f", &ore);
if ( ore <= 36 )
printf("Salario per questa settimana: %.0f Euro\n", euro);
if (ore >= 37 || ore <= 46 )
{
ore12 = ore - 36;
euro12 = euro + ((euro/36) * (ore12 * 1.2));
printf("Salario per questa settimana: %.0f Euro\n", euro12);
}
if (ore >= 47 || ore <= 99 )
{
ore15 = ore - 36;
euro15 = euro + ((euro/36) * (ore15 * 1.5));
printf("Salario per questa settimana: %.0f Euro\n", euro15);
}
if (ore >= 37 || ore <= 46 )
{
ore12 = ore - 36;
printf("Numero di ore pagate a 1.2 volte il salario di base: %.0f\n", ore12);
}
if (ore >= 47 || ore <= 99 )
{
ore15 = ore - 47;
printf("Numero di ore pagate a 1.5 volte il salario di base: %.0f\n", ore15);
}
return 0;
}
Perchè poi come output mi da: che come prima mi da tutti i tipi di risultati possibili che può dare, senza differenziarli dal tipo di if che gli ho messo io. Oltre al non capire la differrenza che c'è dalle due stesure del programma, nel tuo non capisco l'utilizzo dei simboli "-=" e "+=", non lì ho ancora studiati, ma dalle definizione che ho sono decremento/incremento non unitario, ma come si utilizzano? A cosa servono?
__________________
IMPOSSIBLE IS NOTHING Ultima modifica di Cadetto Entusiasta : 25-10-2009 alle 16:41. |
|
|
|
|
|
|
#30 |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
il simbolo += sta per somma e riassegna. Un esempio:
Codice:
A = A + B Codice:
A += B stessa cosa per la differenza Codice:
A = A - B Codice:
A -= B
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
#31 |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
Ah, ok, praticamente una scorciatoia, invece di far fare un operazione che sommi alla variabile A la variabile B, senza introdurre una nuova variabile, si usa +=.
E stessa cosa per la differenza. Grazie
__________________
IMPOSSIBLE IS NOTHING |
|
|
|
|
|
#32 |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Si, risparmi codice e una variabile da dichiarare.
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
#33 | |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Quote:
A += B è uguale ad A = A + B Come puoi vedere le uniche variabili sono A e B, presenti in entrambi i casi. |
|
|
|
|
|
|
#34 | |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Quote:
|
|
|
|
|
|
|
#35 | |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
E' un documento interessantissimo.
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
|
#36 | |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
Quindi come dici tu è corretto A = A + B da cui deriva A += B; risparmia una variabile in scrittura (di codice). Giusto!
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
|
#37 |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
Sì infatti, io volevo proprio intendere che si risparmia una variabile per il codice, senza introdurne altre nuove e impiegare più memoria..
__________________
IMPOSSIBLE IS NOTHING |
|
|
|
|
|
#38 | |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
ma nel caso di A = A + B; no. Risparmi solo tempo a scrivere
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
|
#39 | |
|
Member
Iscritto dal: Apr 2005
Città: Prov. di Torino
Messaggi: 164
|
Quote:
Ma sapreste dirmi cosa sbaglio/cosa c'è di tanto diverso tra Codice:
#include <stdio.h>
int main()
{
float sal, orario;
int ore, diff12 = 0, diff15 = 0;
printf("Inserire il salario settimanale dell’impiegato [Euro]: ");
scanf("%f", &sal);
orario = sal / 36;
printf("Inserire il numero di ore lavorate: ");
scanf("%d", &ore);
if (ore > 46)
{
diff15 = ore - 46;
sal += diff15 * orario * 1.5;
ore -= diff15;
}
if (ore > 36)
{
diff12 = ore - 36;
sal += diff12 * orario * 1.2;
ore -= diff12;
}
printf("Salario per questa settimana: %.0f\n", sal);
if (diff12 > 0)
printf("Numero di ore pagate a 1.2 volte il salario di base: %d\n", diff12);
if (diff15 > 0)
printf("Numero di ore pagate a 1.5 volte il salario di base: %d\n", diff15);
return 0;
}
Codice:
#include <stdio.h>
int main()
{
float euro, euro12, euro15, ore, ore12, ore15;
printf("Inserire il salario settimanale dell’impiegato [Euro]: ");
scanf("%f", &euro);
printf("Inserire il numero di ore lavorative: ");
scanf("%f", &ore);
if ( ore <= 36 )
printf("Salario per questa settimana: %.0f Euro\n", euro);
if (ore >= 37 || ore <= 46 )
{
ore12 = ore - 36;
euro12 = euro + ((euro/36) * (ore12 * 1.2));
printf("Salario per questa settimana: %.0f Euro\n", euro12);
}
if (ore >= 47 || ore <= 99 )
{
ore15 = ore - 36;
euro15 = euro + ((euro/36) * (ore15 * 1.5));
printf("Salario per questa settimana: %.0f Euro\n", euro15);
}
if (ore >= 37 || ore <= 46 )
{
ore12 = ore - 36;
printf("Numero di ore pagate a 1.2 volte il salario di base: %.0f\n", ore12);
}
if (ore >= 47 || ore <= 99 )
{
ore15 = ore - 47;
printf("Numero di ore pagate a 1.5 volte il salario di base: %.0f\n", ore15);
}
return 0;
}
__________________
IMPOSSIBLE IS NOTHING |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:08.





















