Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Primo Anno
 Programmazione
 Help piccola funzione
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

Leon
Utente giovane


Regione: Puglia
Prov.: Bari
Città: Monopoli


Inserito il - 08/02/2008 : 17:23:42  Mostra Profilo  Visita l'Homepage di Leon  Clicca per vedere l'indirizzo MSN di Leon Invia a Leon un Messaggio Privato  Rispondi Quotando
Raga mi vergogno anche a chiedere aiuto per questi errori, ma non ne riesco proprio a venire a capo.... creo una piccola lista spero mi sappiate aiutare:

ERRORE1:switch quantity not an integer;
ERRORE2:invalid operands to binary + (perche' non mi da quest'errore con la sottrazione ???)
CODICE: void calcola (punt *p1, punt *p2, punt *p3, punt *p){
switch(*p3) {
case 1: *p=*p1 + *p2; break;
} ......


ERRORE: comparison between pointer and integer
CODICE: void calcola (punt *p1, punt *p2, punt *p3, punt *p){
if (*p3==1) ......

ERRORE: assignment makes pointer from integer without a cast
CODICE: *p = *p1 - *p2;



Nell'ultimo errore, cosi come nel secondo, non capisco: mettendo *p (per esempio) di fatto, non e' come se operassi con il contenuto dell'indirizzo puntato da p ? (ossia con il contenuto dell'indirizzo contenuto in p) ??? Se si, perche' mi da questo errore ??? PRECISO che i puntatori in fase di dichiarazione sono stati posti cosi:

typedef int *punt;
punt p,p1,p2,p3;

Mi sapreste rispondere ??? Grazie mille in anticipo

Don't you let your demons pull you down cause you can have it all

Capitan
Utente medio

Mix



Inserito il - 09/02/2008 : 09:50:39  Mostra Profilo  Visita l'Homepage di Capitan Invia a Capitan un Messaggio Privato  Rispondi Quotando
Ciao Leon inserisci prorpio tutto il codice compilabile... Così provo a compilare e capire quali errrori fa...
Torna all'inizio della Pagina

Leon
Utente giovane


Regione: Puglia
Prov.: Bari
Città: Monopoli


Inserito il - 26/08/2008 : 14:12:28  Mostra Profilo  Visita l'Homepage di Leon  Clicca per vedere l'indirizzo MSN di Leon Invia a Leon un Messaggio Privato  Rispondi Quotando
Raga nessuno che mi può aiutare ??? Ho sempre lo stessissimo errore e nessuno mi ha ancora dato una risposta...
La parte di codice interessata è solo quella non c'è nessun bisogno che inserisca tutto il codice...
Perfavore qualche anima pia che mi risponda altrimenti mi metto una corda al collo...

Don't you let your demons pull you down cause you can have it all
Torna all'inizio della Pagina

lacrijux
Utente Gastema

sacc come la veggh


Regione: Puglia
Prov.: Bari
Città: bari


Inserito il - 26/08/2008 : 14:42:17  Mostra Profilo  Visita l'Homepage di lacrijux  Clicca per vedere l'indirizzo MSN di lacrijux Invia a lacrijux un Messaggio Privato  Rispondi Quotando
per accedere al valore puntato devi usare la &

per valore puntatore intendo dire: al valore a cui punta il puntatore

...mok a kedda kia....
bello! Ma sta a parl o sa a muv le rekkiie?
citazione colta: Megghiie ferit ke muert!
La fregatura e' che la coca cola si paga, ma il chinotto e' gratis.
"la vertigine non è paura di cadere, ma è voglia di volare!"[cit]

Modificato da - lacrijux in data 26/08/2008 14:43:25
Torna all'inizio della Pagina

n/a
deleted

Prov.: Bari
Città: Bari


Inserito il - 27/08/2008 : 11:42:31  Mostra Profilo  Visita l'Homepage di n/a Invia a n/a un Messaggio Privato  Rispondi Quotando
La function è corretta. Il problema è come viene attivata ed il tipo punt.
Esempio:

#include <stdio.h>
typedef int punt;
void calcola (punt *p1, punt *p2, punt *p3, punt *p);
int main()
{ punt *a, *b, *c, *d;
int x, y, z, zz;

// inizializza puntatori
c=&x; a=&y; b=&z; d=&zz;
*a =2;
*b=3;
*c=1;
printf("\n *c= %d \n" , *c);
calcola ( a, b, c, d);
printf(" *d= %d \n" , *d);
system("pause");
return 0;
}

void calcola (punt *p1, punt *p2, punt *p3, punt *p){
printf("Hello World\n *p3= %d \n" , *p3);
switch(*p3) {
case 1: *p = *p1 + *p2; break;

} printf("Hello World\n *p= %d \n" , *p);
}
Torna all'inizio della Pagina

Leon
Utente giovane


Regione: Puglia
Prov.: Bari
Città: Monopoli


Inserito il - 27/08/2008 : 15:02:13  Mostra Profilo  Visita l'Homepage di Leon  Clicca per vedere l'indirizzo MSN di Leon Invia a Leon un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da Laura Caponetti

La function è corretta. Il problema è come viene attivata ed il tipo punt.
Esempio:

#include <stdio.h>
typedef int punt;
void calcola (punt *p1, punt *p2, punt *p3, punt *p);
int main()
{ punt *a, *b, *c, *d;
int x, y, z, zz;

// inizializza puntatori
c=&x; a=&y; b=&z; d=&zz;
*a =2;
*b=3;
*c=1;
printf("\n *c= %d \n" , *c);
calcola ( a, b, c, d);
printf(" *d= %d \n" , *d);
system("pause");
return 0;
}

void calcola (punt *p1, punt *p2, punt *p3, punt *p){
printf("Hello World\n *p3= %d \n" , *p3);
switch(*p3) {
case 1: *p = *p1 + *p2; break;

} printf("Hello World\n *p= %d \n" , *p);
}




Ok questa mi torna nuova.... perchè devo inizializzare i puntatori in quel modo ? cioè come è scritto in questo esempio è come se dichiaro i puntatori tre volte.... Un secondo faccio l'esempio diretto sulla stessa funzione:

#include <stdio.h>
typedef int punt;
punt *a, *b, *c, *d;
void calcola (punt *p1, punt *p2, punt *p3, punt *p);
int main()
{
// punt *a, *b, *c, *d; <-- questo nelle dich. globali
// int x, y, z, zz; <-- questo lo elimino
// inizializza puntatori <-- perchè inizializzarli cosi ?
// c=&x; a=&y; b=&z; d=&zz;
// *a =2;
// *b=3;
// *c=1;
// printf("\n *c= %d \n" , *c);
calcola ( &p1, &p2, &p3, &p);
printf(" *d= %d \n" , *d);
system("pause");
return 0;
}

void calcola (punt *p1, punt *p2, punt *p3, punt *p){
printf("Hello World\n *p3= %d \n" , *p3);
switch(*p3) {
case 1: *p = *p1 + *p2; break;

} printf("Hello World\n *p= %d \n" , *p);
}


In tutti i casi ci sono delle piccose cose:
1) Nel passaggio dei parametri alle function, il puntatore dev'essere passato nella notazione &puntatore (per permetterci di passare l'indirizzo) e non come semplice passaggio per valore... Il problema è che il compilatore mi da errore anche se metto la &puntatore nella chiamata della function....
2) Nella riga di comando subito successiva allo SWITCH, continua ad esserci l'errore INVALID OPERANDS TO BINARY + (o le altre tre operazioni)...

@ lacrijux: la & viene usata per restituire l'indirizzo a cui punta il puntatore... la * invece (operatore di deferenziazione) viene usata per restituire la variabile (quindi il suo contenuto)...

ora provo come ha proposto Laura Caponetti (non penso sia la VERA Laura Caponetti), altrimenti mi do all'ippica (o se qualcuno che non è in vacanza prova ad aiutarmi).....

Ciao a tutti e grazie ancora

Don't you let your demons pull you down cause you can have it all
Torna all'inizio della Pagina

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 27/08/2008 : 15:23:45  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
premetto che è da un pò che non programmo in c++. Ti rispondo per quel che ricordo.

Citazione:
Messaggio inserito da Leon

Raga mi vergogno anche a chiedere aiuto per questi errori, ma non ne riesco proprio a venire a capo.... creo una piccola lista spero mi sappiate aiutare:

ERRORE1:switch quantity not an integer;
ERRORE2:invalid operands to binary + (perche' non mi da quest'errore con la sottrazione ???)
CODICE: void calcola (punt *p1, punt *p2, punt *p3, punt *p){
switch(*p3) {
case 1: *p=*p1 + *p2; break;
} ......


ERRORE: comparison between pointer and integer
CODICE: void calcola (punt *p1, punt *p2, punt *p3, punt *p){
if (*p3==1) ......

ERRORE: assignment makes pointer from integer without a cast
CODICE: *p = *p1 - *p2;



Nell'ultimo errore, cosi come nel secondo, non capisco: mettendo *p (per esempio) di fatto, non e' come se operassi con il contenuto dell'indirizzo puntato da p ? (ossia con il contenuto dell'indirizzo contenuto in p) ??? Se si, perche' mi da questo errore ??? PRECISO che i puntatori in fase di dichiarazione sono stati posti cosi:

typedef int *punt;
punt p,p1,p2,p3;

Mi sapreste rispondere ??? Grazie mille in anticipo




per quanto vedo qui, punt è un puntatore ad int, quindi in tutti gli altri punti del programma dovresti usare semplicemente punt. ti faccio un esempio di come dovrebbe essere scritto il tutto:

CODICE: void calcola (punt p1, punt p2, punt p3, punt p){
switch(*p3) {
case 1: *p=*p1 + *p2; break;
} ......


CODICE: void calcola (punt p1, punt p2, punt p3, punt p){
if (*p3==1) ......

CODICE: *p = *p1 - *p2;

fermo restando la dichiarazione:

typedef int *punt;
punt p,p1,p2,p3;

"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina

Leon
Utente giovane


Regione: Puglia
Prov.: Bari
Città: Monopoli


Inserito il - 27/08/2008 : 15:46:28  Mostra Profilo  Visita l'Homepage di Leon  Clicca per vedere l'indirizzo MSN di Leon Invia a Leon un Messaggio Privato  Rispondi Quotando
Aggiornamento: come dice Laura Caponetti in effetti in fase di compilazione non da alcun errore, ma rimane il fatto che comunque il programma non effettua alcun passaggio per riferimento poichè alla chiusura della function e al ritorno al main, il contenuto delle variabili puntate cambiano...

Comunque per chiarezza incollo l'intero codice e vi metto come commento ciò che io penso..... booooh....

#include <stdio.h>

typedef int punt;

void menu (punt *op1, punt *op2, punt *s);
void math (punt *ris, punt *s, punt *op1, punt *op2);


main () {
punt *x, *y, *z, *zs;
int a, b, c, d;
x= &a;
y= &b;
z= &c;
zs= &d;
do {
menu (x, y, z); //se uso la notazione &, come in teoria si dovrebbe fare (menu(&x, &y, &z)), il compilatore mi dice 17 cannot convert `punt**' to `punt*' for argument `1' to `void menu(punt*, punt*, punt*)'

printf ("%i\n%i\n%i\n", z, x, y); //questa riga l'ho messa per verificare se i valori ritornati al main fossero giusti e, in effetti, sono completamente errati (credo che stampando cosi vengano in realtà fuori gli indirizzi ma, usando la *, vengono fuori valori assurdi)

math (zs, z, x, y);
if (*z!=0) { printf ("Il risultato dell'operazione richiesta e' %i", zs); }
getchar();
} while (*z!=0);
}







void menu (punt *op1, punt *op2, punt *s ) {

printf(" |---------------------------------------------------------------------|\n");

printf(" | ***THIS SOFTWARE IS PRODUCED BY*** |\n");
printf(" | ***LEON*** |\n");

printf(" |---------------------------------------------------------------------|\n");
getchar();
printf (" --- Inserisci il primo dei due operandi ---\n");
scanf ("%i", &op1);
printf (" --- Inserisci il secondo dei due operandi ---\n");
scanf ("%i", &op2);
printf (" --- Premi 1 per la somma ---\n");
printf (" --- Premi 2 per la sottrazione ---\n");
printf (" --- Premi 3 per la divisione ---\n");
printf (" --- Premi 4 per la moltiplicazione ---\n");
printf (" --- Premi 0 per uscire dal programma ---\n");
//printf (" --- Premi 6 per il calcolo di una percentuale ---\n");
scanf ("%i", &s);
}



void math (punt *ris, punt *s, punt *op1, punt *op2) {
printf ("%i\n", s);
printf("%i\n", op1);
printf("%i\n", op2);
switch (*s) {
case 1 : *ris = *op1+*op2; break;
case 2 : *ris = *op1-*op2; break;
case 3 : *ris = *op1 / *op2; break;
case 4 : *ris = *op1* *op2; break;
default : printf ("\nScelta errata oppure vuoi uscire");
}
}

Don't you let your demons pull you down cause you can have it all
Torna all'inizio della Pagina

Leon
Utente giovane


Regione: Puglia
Prov.: Bari
Città: Monopoli


Inserito il - 27/08/2008 : 15:50:04  Mostra Profilo  Visita l'Homepage di Leon  Clicca per vedere l'indirizzo MSN di Leon Invia a Leon un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da genius

premetto che è da un pò che non programmo in c++. Ti rispondo per quel che ricordo.

Citazione:
Messaggio inserito da Leon

Raga mi vergogno anche a chiedere aiuto per questi errori, ma non ne riesco proprio a venire a capo.... creo una piccola lista spero mi sappiate aiutare:

ERRORE1:switch quantity not an integer;
ERRORE2:invalid operands to binary + (perche' non mi da quest'errore con la sottrazione ???)
CODICE: void calcola (punt *p1, punt *p2, punt *p3, punt *p){
switch(*p3) {
case 1: *p=*p1 + *p2; break;
} ......


ERRORE: comparison between pointer and integer
CODICE: void calcola (punt *p1, punt *p2, punt *p3, punt *p){
if (*p3==1) ......

ERRORE: assignment makes pointer from integer without a cast
CODICE: *p = *p1 - *p2;



Nell'ultimo errore, cosi come nel secondo, non capisco: mettendo *p (per esempio) di fatto, non e' come se operassi con il contenuto dell'indirizzo puntato da p ? (ossia con il contenuto dell'indirizzo contenuto in p) ??? Se si, perche' mi da questo errore ??? PRECISO che i puntatori in fase di dichiarazione sono stati posti cosi:

typedef int *punt;
punt p,p1,p2,p3;

Mi sapreste rispondere ??? Grazie mille in anticipo




per quanto vedo qui, punt è un puntatore ad int, quindi in tutti gli altri punti del programma dovresti usare semplicemente punt. ti faccio un esempio di come dovrebbe essere scritto il tutto:

CODICE: void calcola (punt p1, punt p2, punt p3, punt p){
switch(*p3) {
case 1: *p=*p1 + *p2; break;
} ......


CODICE: void calcola (punt p1, punt p2, punt p3, punt p){
if (*p3==1) ......

CODICE: *p = *p1 - *p2;

fermo restando la dichiarazione:

typedef int *punt;
punt p,p1,p2,p3;



Non è c++ è c
Comunque non va nemmeno cosi....al main ritornano sempre valori sballati

Don't you let your demons pull you down cause you can have it all
Torna all'inizio della Pagina

n/a
deleted

Prov.: Bari
Città: Bari


Inserito il - 27/08/2008 : 16:39:57  Mostra Profilo  Visita l'Homepage di n/a Invia a n/a un Messaggio Privato  Rispondi Quotando
Alcune correzioni:

#include <stdio.h>

typedef int punt;

void menu (punt *op1, punt *op2, punt *s);
void math (punt *ris, punt *s, punt *op1, punt *op2);


main () {
punt *x, *y, *z, *zs;
int a, b, c, d;
x= &a;
y= &b;
z= &c;
zs= &d;
do {
//menu (x, y, z); //se uso la notazione &, come in teoria si dovrebbe fare (menu(&x, &y, &z)), il compilatore mi dice 17 cannot convert `punt**' to `punt*' for argument `1' to `void menu(punt*, punt*, punt*)'

//printf ("%i\n%i\n%i\n", z, x, y); //questa riga l'ho messa per verificare se i valori ritornati al main fossero giusti e, in effetti, sono completamente errati (credo che stampando cosi vengano in realtà fuori gli indirizzi ma, usando la *, vengono fuori valori assurdi)

// correzione---- se si vuole effetuare il passaggio per riferimento è necessario
// è necessario considerare l'indirizzo dei parametri in questo caso delle variabili intere caso delle variabili
// a, b, c - le operazioni aritmetiche si vogliono fare infatti tra interi
// non si deve quindi introdurre una variabile puntatore

menu (&a, &b, &c);
printf ("%i\n%i\n%i\n", a, b, c);
// correzione: in modo analogo si modificano i parametri e la function math
// buon lavoro!
math (zs, z, x, y);
if (*z!=0) { printf ("Il risultato dell'operazione richiesta e' %i", zs); }
getchar();
} while (*z!=0);
}

void menu (punt *op1, punt *op2, punt *s ) {
// correzione - poiche i parametri passati sono indirizzi è corretto
// introdurre come parametri della funzione dei puntatori
// ma la scanf deve essere modificata

printf(" |---------------------------------------------------------------------|\n");

printf(" | ***THIS SOFTWARE IS PRODUCED BY*** |\n");
printf(" | ***LEON*** |\n");

printf(" |---------------------------------------------------------------------|\n");
getchar();
printf (" --- Inserisci il primo dei due operandi ---\n");
// correzione - la scanf vuole l'indirizzo della variabile in cui inserire il valore
// letto - questo indirizzo è il valore del puntatore op1
// scanf ("%i", &op1);
scanf ("%i", op1);
printf (" --- Inserisci il secondo dei due operandi ---\n");
// scanf ("%i", &op2);
scanf ("%i", op2);
printf (" --- Premi 1 per la somma ---\n");
printf (" --- Premi 2 per la sottrazione ---\n");
printf (" --- Premi 3 per la divisione ---\n");
printf (" --- Premi 4 per la moltiplicazione ---\n");
printf (" --- Premi 0 per uscire dal programma ---\n");
//printf (" --- Premi 6 per il calcolo di una percentuale ---\n");
// scanf ("%i", &s);
scanf ("%i", s);
}



void math (punt *ris, punt *s, punt *op1, punt *op2) {
printf ("%i\n", s);
printf("%i\n", op1);
printf("%i\n", op2);
switch (*s) {
case 1 : *ris = *op1+*op2; break;
case 2 : *ris = *op1-*op2; break;
case 3 : *ris = *op1 / *op2; break;
case 4 : *ris = *op1* *op2; break;
default : printf ("\nScelta errata oppure vuoi uscire");
}
}


Torna all'inizio della Pagina

Leon
Utente giovane


Regione: Puglia
Prov.: Bari
Città: Monopoli


Inserito il - 28/08/2008 : 12:12:19  Mostra Profilo  Visita l'Homepage di Leon  Clicca per vedere l'indirizzo MSN di Leon Invia a Leon un Messaggio Privato  Rispondi Quotando
Ok risolto
Un grazie mille a Laura Caponetti (e penso debba chiedere scusa se ho sempre messo in dubbio tutto ciò che tu abbia scritto)...
Anche se in tutti i casi non ho usato &a, &b, &c ed &d come hai suggerito tu, ma direttamente x,y,z,zs (poichè contengono l'indirizzo che punta alle variabili intere)...
Per chiarire una volta per tutte il dubbio, incollo di nuovo l'intero codice (questa volta corretto) cosi possiamo aiutare chi magari ha avuto gli stessi miei problemi e non ha avuto il coraggio di chiedere per paura di esser preso per fesso.....
Ecco il codice:

#include <stdio.h>

typedef int *punt;

void menu (punt op1, punt op2, punt s);
void math (punt ris, punt s, punt op1, punt op2);


main () {
punt x, y, z, zs;
int a, b, c, d;
x= &a;
y= &b;
z= &c;
zs= &d;
do {
menu (x, y, z);
printf ("\n%i\n%i\n", *x, *y);
math (zs, z, x, y);
if (*z!=0) { printf ("Il risultato dell'operazione richiesta e' %i\n", *zs); }
getchar();
} while (*z!=0);
}



void menu (punt op1, punt op2, punt s ) {

printf(" |---------------------------------------------------------------------|\n");

printf(" | ***THIS SOFTWARE IS PRODUCED BY*** |\n");
printf(" | ***LEON*** |\n");

printf(" |---------------------------------------------------------------------|\n");
getchar();
printf (" --- Inserisci il primo dei due operandi ---\n");
scanf ("%i", op1);
printf (" --- Inserisci il secondo dei due operandi ---\n");
scanf ("%i", op2);
printf (" --- Premi 1 per la somma ---\n");
printf (" --- Premi 2 per la sottrazione ---\n");
printf (" --- Premi 3 per la divisione ---\n");
printf (" --- Premi 4 per la moltiplicazione ---\n");
printf (" --- Premi 0 per uscire dal programma ---\n");
scanf ("%i", s);
}



void math (punt ris, punt s, punt op1, punt op2) {
switch (*s) {
case 1 : *ris = *op1+*op2; break;
case 2 : *ris = *op1-*op2; break;
case 3 : *ris = *op1 / *op2; break;
case 4 : *ris = *op1* *op2; break;
default : printf ("\nScelta errata oppure vuoi uscire");
}
}

Don't you let your demons pull you down cause you can have it all
Torna all'inizio della Pagina

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 28/08/2008 : 18:27:18  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
scusa leon, ma a me sembra ke le correzioni ke hai fatto sono esattamente quelle che ti ho suggerito... mi sbaglio?

"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina

Leon
Utente giovane


Regione: Puglia
Prov.: Bari
Città: Monopoli


Inserito il - 29/08/2008 : 16:04:31  Mostra Profilo  Visita l'Homepage di Leon  Clicca per vedere l'indirizzo MSN di Leon Invia a Leon un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da genius

scusa leon, ma a me sembra ke le correzioni ke hai fatto sono esattamente quelle che ti ho suggerito... mi sbaglio?



Si infatti... ma rimaneva lo stesso il problema che l'errore non era nelle chiamate (nonostante fossero errate poichè erano frutto di vari tentativi ma il codice iniziale era esatto), bensi nell'inizializzazione dei puntatori...

Don't you let your demons pull you down cause you can have it all
Torna all'inizio della Pagina

n/a
deleted

Prov.: Bari
Città: Bari


Inserito il - 29/08/2008 : 16:46:30  Mostra Profilo  Visita l'Homepage di n/a Invia a n/a un Messaggio Privato  Rispondi Quotando
Ecco una versione del programma in cui i puntatori sono utilizzati dove effettivamente sono necessari. Oltre alle dichiarazioni di punt ...nella versione inziale c'era un errore nei parametri della chiamata alla scanf
Credo non ci sua altro da chiarire



#include <stdio.h>

typedef int *punt;

void menu (punt op1, punt op2, punt s);
void math (punt ris, int s, int op1, int op2);


main () {
// punt x, y, z, zs;
int a, b, c, d;
//x= &a;
//y= &b;
//z= &c;
//zs= &d;
do {
menu (&a, &b, &c);
printf ("\n%i\n%i\n", a, b);
math (&d, c, a, b);
if (c!=0) { printf ("Il risultato dell'operazione richiesta e' %i\n", d); }
getchar();
} while (c!=0);
}



void menu (punt op1, punt op2, punt s ) {

printf(" |---------------------------------------------------------------------|\n");

printf(" | ***THIS SOFTWARE IS PRODUCED BY*** |\n");
printf(" | ***LEON*** |\n");

printf(" |---------------------------------------------------------------------|\n");
getchar();
printf (" --- Inserisci il primo dei due operandi ---\n");
scanf ("%i", op1); //!!!!!!!!!!!
printf (" --- Inserisci il secondo dei due operandi ---\n");
scanf ("%i", op2);
printf (" --- Premi 1 per la somma ---\n");
printf (" --- Premi 2 per la sottrazione ---\n");
printf (" --- Premi 3 per la divisione ---\n");
printf (" --- Premi 4 per la moltiplicazione ---\n");
printf (" --- Premi 0 per uscire dal programma ---\n");
scanf ("%i", s);
}



void math (punt ris, int s, int op1, int op2) {
// math deve restituire solo il primo parametro
switch (s) {
case 1 : *ris = op1 + op2; break;
case 2 : *ris = op1- op2; break;
case 3 : *ris = op1 / op2; break;
case 4 : *ris = op1* op2; break;
default : printf ("\nScelta errata oppure vuoi uscire");
}
}

Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,28 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000