PDA

View Full Version : [C]Mi guardate questo programma?


stgww
11-02-2008, 14:48
Ciao, ecco la solita calcolatrice....ma si può sapere perchè a me non viene?
Sapete aiutarmi?
Ecco il codice:

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

void menu(){
printf("'*'-->Moltiplicazione\n'/'-->Divisione\n'+'-->Addizione\n'-'-->Sottrazione\n\nDigita ora l'operazione\n");

}
float molt(float a, float b){
float molt;
molt=a*b;
return molt;
}
float divi(float a, float b){
float div;
div=a/b;
return div;
}
float add(float a, float b){
float add;
add=a-b;
return add;
}
float sott(float a, float b){
float sott;
sott=a-b;
return sott;
}
int main(){
float num,num0,molt,div,add,sott;
char oper;
printf("Calcolatrice 0.1 Beta\n\nPer le operazione usa i simboli\n");
menu();
scanf("%f\n", &num);
scanf("%s\n", &oper);
scanf("%f\n", &num0);
switch (oper){
case '*': molt=molt(num,num0);
break;*/
case '/': div=divi(num,num0);
break;
case '+': add=add(num,num0);
break;
case '-': sott=sott(num,num0);
break;
}*/
}


system("PAUSE");
return 0;
}

Grazie

gugoXX
11-02-2008, 14:57
Non stampi il risultato...

E sarebbe anche opportuno tenere i risultati in una variabile sola (chiamata magari result, invece che avere 4 variabili che poi non sai bene come usare).

stgww
11-02-2008, 15:04
Grazie, il compilatore dice che le delle 4 solo la divisione è una funzione, per il resto dice "called object is not a function", cosa dovrei fare?

EDIT: Ho cambiato in un unica variabile result come hai detto tu e ora va. Grazie!!!
Solo una cosa ora non capisco, perchè dopo aver scritto il secondo numero devo premere per forza un qualsiasi altro tasto altrimenti non va?

gugoXX
11-02-2008, 15:08
Ripeto, cambia i nomi delle tue variabili che dovrebbero tenere il risultato.
Usa solo una variabile.
Scrivi p.es.
res=add(num,num0);
res=divi(num,num0);
etc.
e alla fine stampi res.

Stai anche chiamando le variabili con lo stesso nome delle tue funzioni, per quello il compilatore si sta arrabbiando.

stgww
11-02-2008, 15:18
Ripeto, cambia i nomi delle tue variabili che dovrebbero tenere il risultato.
Usa solo una variabile.
Scrivi p.es.
res=add(num,num0);
res=divi(num,num0);
etc.
e alla fine stampi res.

Stai anche chiamando le variabili con lo stesso nome delle tue funzioni, per quello il compilatore si sta arrabbiando.

Hai ragione:D Me ne ero accorto e ho anche editato il post sopra !
Ora il mio problema è che dopo aver inserito il secondo numero, clicco invio e non mi appare subito la stampa, ma prima devo premergli un tasto poi invio e poi me la da
Riporto il codice:

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

void menu(){
printf("'*'-->Moltiplicazione\n'/'-->Divisione\n'+'-->Addizione\n'-'-->Sottrazione\n\nDigita ora l'operazione\n");

}
float molt(float a, float b){
float molt=0;
molt=a*b;
return molt;
}
float divi(float a, float b){
float div=0;
div=a/b;
return div;
}
float add(float a, float b){
float add=0;
add=a+b;
return add;
}
float sott(float a, float b){
float sott=0;
sott=a-b;
return sott;
}
int main(){
float num=0,num0=0,result=0;
char oper;
printf("Calcolatrice 0.1 Beta\n\nPer le operazione usa i simboli\n");
menu();
scanf("%f\n", &num);
scanf("%s\n", &oper);
scanf("%f\n", &num0);
switch (oper){
case '*': result=molt(num,num0);
break;
case '/': result=divi(num,num0);
break;
case '+': result=add(num,num0);
break;
case '-': result=sott(num,num0);
break;
}
printf("Risultato: %f \n", result);







system("PAUSE");
return 0;
}

ramarromarrone
11-02-2008, 15:23
prima di tutto nella divisione devi controllare che non si divida per 0,

perchè l'operatore lo consideri string? è un char... -->&c non &s

poi perchè fai 3 scanf?

basta semplicemente
scanf("%f %c %f", &num, &oper, &num0);

e non ci vuole \n nello scanf

gugoXX
11-02-2008, 15:24
Togli i /n dallo scanf.

stgww
11-02-2008, 15:31
prima di tutto nella divisione devi controllare che non si divida per 0,

perchè l'operatore lo consideri string? è un char... -->&c non &s

poi perchè fai 3 scanf?

basta semplicemente
scanf("%f %c %f", &num, &oper, &num0);
THX

Togli i /n dallo scanf.
THX

Sapete per caso come si fa ad estrarre un numero casuale, o meglio un set di numeri casuali e poi determinare la posizione di quello più alto ?

ramarromarrone
11-02-2008, 15:43
umm..


#include <stdlib.h>
#include <time.h>

int i;

srand(time(NULL)); /*fa si che ogni volta si generi un numero diverso*/
i = rand() % 100 + 1; /* %100 + 1 stampa un numero casuale tra 1 e 100*/

se non metti il srand ogni volta che avvii il programma ti ridarà gli stessi numeri

se vuoi una serie di numeri casuali fai un for e li salvi in un array o in una lista..

marra11mg
11-02-2008, 15:53
Sapete per caso come si fa ad estrarre un numero casuale, o meglio un set di numeri casuali e poi determinare la posizione di quello più alto ?

Per generarli e ordinarli


#include <stdlib.h>

srand(time(NULL)); // randomizza la serie di numeri

int setNumeri[quantiNumeri];

for (int i = 0; i < quantiNumeri; i++)
{
// RAND_MAX è una costante corrispondente a 32768
// Al posto di NumeroRandomPiuAlto ci metti il numero più alto che il
// generatore di numeri deve dare.
setNumeri[i] = rand() * NumeroRandomPiuAlto / RAND_MAX;
}


// per ordinare l'array di numeri generati
qsort((void*)setNumeri, quantiNumeri, sizeof(int), Confronta);



Il numero più alto si troverà nella posizione setNumeri[quantiNumeri - 1]



Funzione di supporto per l'ordinamento


int Confronta( const void *arg1, const void *arg2 )
{
int *indice1 = (int*) arg1;
int *indice2 = (int*) arg2;

if (*indice1 < *indice2) return -1;
else if (*indice1 == *indice2) return 0;
else return 1;
}

ramarromarrone
11-02-2008, 15:57
Per generarli e ordinarli


#include <stdlib.h>

srand(time(NULL)); // randomizza la serie di numeri

int setNumeri[quantiNumeri];

for (int i = 0; i < quantiNumeri; i++)
{
// RAND_MAX è una costante corrispondente a 32768
// Al posto di NumeroRandomPiuAlto ci metti il numero più alto che il
// generatore di numeri deve dare.
setNumeri[i] = rand() * NumeroRandomPiuAlto / RAND_MAX;
}


// per ordinare l'array di numeri generati
qsort((void*)setNumeri, quantiNumeri, sizeof(int), Confronta);



Il numero più alto si troverà nella posizione setNumeri[quantiNumeri - 1]



Funzione di supporto per l'ordinamento


int Confronta( const void *arg1, const void *arg2 )
{
int *indice1 = (int*) arg1;
int *indice2 = (int*) arg2;

if (*indice1 < *indice2) return -1;
else if (*indice1 == *indice2) return 0;
else return 1;
}



eh ma così gli togli il divertimento di farselo lui...

stgww
11-02-2008, 16:05
Boh...sono cose che non ho mai fatto