PDA

View Full Version : mi dite perchè non funziona?


Bandit
14-11-2004, 13:36
/*Program max_fra_tre (esempio d'uso del costrutto if*/

#include<iostream>
using namespace std
#include<stdlib.h>

int main()
{
float a,b,c;
float max;

cout<<"assegna valore ad a,b,c \n";
cin>>a>>b>>c;

max=a;

if(b>max)
{
max=b;
}
if(c>max) max=c;

cout<<"\nil massimo valore e\':"<<max;

system("PAUSE");
return 0;
}


ho copiato pari pari da una guida e mi dice che ci sono una ventina di errori.
uso il dev 4.999, cioè l'ultimissimo.

kingv
14-11-2004, 15:22
così ad occhio manca il punto e virgola alla fine della riga:

using namespace std

Bandit
14-11-2004, 15:30
noooooo è vero. :muro: :muro: :muro:
ma è mai possibile, non mi rendo conto di un punto e virgola e non funziona tutto:muro: :muro: :muro: :muro: :muro:

Fenomeno85
15-11-2004, 09:45
scusate, ma data la mia ignoranza ... che è?

using namespace std


~§~ Sempre E Solo Lei ~§~

71103
15-11-2004, 10:45
Vuol dire che da quella riga in poi, puoi utilizzare tutti i simboli definiti nello scopo di quel namespace senza doverlo esplicitare; :O ad esempio:


std::cout << "hello world\n"; // senza quella riga


cout << "hello world\n"; // con quella riga

Oddio non ricordo esattamente se cout era definito in std... :confused:

Bandit
15-11-2004, 18:54
/*program equazione di secondo grado*/
#include<iostream>
using namespace std;
#include<stdlib.h>
#include<math.h>

int main()
{
float A,B,C;
float Discr,J;
float R,X,X1,X2;
double I;
/*modulo soluzione 2*/
{
X-C/B;
cout<<"L\'equazione ammette una radice reale X=<<X;
}
/*Modulo soluzione 2*/
{
{cout<<"l\'equazione è indeterminata";
}
/*Modulo tera soluzione 3*/
{
cout<<"L\'equazione è impossibile";
}
/*Modulo soluzione generale*/
{
R=B/(2*A);
Discr=(R*R)-C/A;
J=fabs(Discr);
I=sqrt((double)J);

if{Discr<0)
{
cout<<"L\'equazione ammette due radici complesse coniugate C1=R + jI, C2=R-jI\n";
cout<<"C1=<<"R<<"+j"<<I<<" \n C2=<<R<<"-j"<<I;
}
else
{
if(Discr=0)
{
cout<<"L\'equazione ammette una radice reale X=R \n"<<"X="<<R;
}
else
{
X1=R+I;
X2=R-I;
cout<<"L\'equazione ammette due radici reali X1="<<X1<<"\t X2="<<X2;
}
}
}


quest'altro anche. come mai?

beppegrillo
15-11-2004, 19:11
Secondo te questa cosa che fà?
X-C/B;

ti dò un consiglio. anzichè copiare codice da altre parti cerca di capire come funziona, in questo modo errori banali come questi li eviteresti sicuramente...

Bandit
15-11-2004, 19:21
una dritta per capire?come si capisce come funziona?

beppegrillo
15-11-2004, 20:09
Originariamente inviato da Bandit
una dritta per capire?come si capisce come funziona?
Intendo dire, cerca di capire cosa stai facendo mentre scrivi codice e non riportarlo solo in maniera passiva, cosi' ti accorgi che l'istruzione precedente non ha alcun significato.

Bandit
15-11-2004, 22:37
interamente o solo quella che mi hai indicato?

Bandit
16-11-2004, 12:14
Ciao questo l'ho creato io
#include<iostream>;
using namespace std;
#include<stdlib.h>;
int main()
{
float X;
int Dx;
int X=max;
Dx=0;X=0;
do
{
cout<<"assegna valore ad X\n";
cin>>X;
X=X+Dx;
Dx++;
}while(x<=xmax)
cout<<"\nla somma dei "<<Dx<<" numeri di X="<<S;
system("PAUSE");
return 0;
}



la traccia è:Ho X e voglio incrementare di DX fino ad arrivare ad xmax.
perche non va?

Bandit
26-11-2004, 17:55
#include<iostream>;
using namespace std;
#include<stdlib.h>;
#include<math.h>;

int main()
{
float x,r;
char ripeti;


do
{
cout<<"assegna valore ad x\n";
cin>>x;
if(x>0)
{
r=sqrt(x);
}
else if(x<0)
{
cout<<"\n"<<r<<"è impossibile";
}
cout<<"\nil risultato della radice è r="<<r<<"\n";
cout<<"\nvuoi continuare? s/n\t";
cin>>ripeti;
}while(ripeti=='s');

cout<<"\nil risultato della radice è r="<<r<<"\n";


system("PAUSE");
return 0;
}

vorrei che quando ci metto una x negativa mi dice è impossibile, senza calcolarmi nulla.come si fa?

cionci
27-11-2004, 08:10
Gli include C si mettono così:

#include<iostream>
#include<cstdlib>
using namespace std;

Inoltre non è necessario il ; dopo gli include...

|unknown|
27-11-2004, 16:34
visto che usi il dev fare doppio click o ancora meglio leggere gli errori riportati sotto no eh?

Bandit
27-11-2004, 16:40
non mi porta errore voglio quella condizione detta prima.

cionci
28-11-2004, 15:11
#include<iostream>
#include<cstdlib>
#include<cmath>

using namespace std;

int main()
{
float x,r;
char ripeti;


do
{
cout<<"assegna valore ad x\n";
cin>>x;
if(x>=0)
{
r=sqrt(x);
cout<<"\nil risultato della radice è r="<<r<<"\n";
}
else
{
cout<<"\n"<<r<<"è impossibile";
}
cout<<"\nvuoi continuare? s/n\t";
cin>>ripeti;
}while(ripeti=='s');

if(x>=0) cout<<"\nil risultato della radice è r="<<r<<"\n";


system("PAUSE");
return 0;
}

Non mettere \n come carattere di fine linea, ma endl...

Bandit
11-12-2004, 18:20
Ciao

#include<iostream>
using namespace std;
#include<stdlib.h>

void input(int&riemp,float vett[]);
void fricmin(int riemp,float vett[],float &minimo,int &quanti,int posto[]);
void output(float minimo,int quanti,int posto[]);
int main()
{
int n,k,pos[100];
float min;
float v[100];

input(n,v);
fricmin(n,v,min,k,pos);
output(min,k,pos);
cout<<"\n\n";
system("PAUSE");
return 0;
}
void input(int&riemp,float vett[])
{int i;
cout<<"assegna valore ad n numero di elementi del vettore\n";
cin>>riemp;
cout<<"assegna a"<<riemp<<" valori float a vett\n";
for(i=0;i<riemp;i++)
{
cin>>vett[i];
}

void output(float minimo,int quanti,int posto[])
{ *
int i;
cout<<"\nil valore minimo e\'"<<minimo;
cout<<"ed e\'stato trovato"<<(quanti+1)<<"volte,nei posti \n";
for(i=0;i<quanti;i++)
cout<<posto[i]<<"\t";
}
void fricmin(int riemp,float vett[],float &minimo,int &quanti,int posto[])
{
int i;
quanti=0;
minimo=vett[0];posto[quanti]=0;
for(i=0,i<riemp,i++)
{
if(vett[i]<minimo)
{ quanti=0;
minimo=vett[i];
posto[quanti]=i;
}
else
{ if(vett[i]==minimo)
{
quant++;
posto[quanti]=i;
}
}
}
}



questo prog dovrebbe :D ricercare il valore minimo in un vettore di numeri reali,e si vuole sapere quanti elementi hanno valore uguale al minimo e in quali posti si trovano nel vetore.
come primo errore strano mi porta :ve lo indico con "*" perchè?

grazie e abbiate pasienza

Bandit
11-12-2004, 18:52
Originariamente inviato da Bandit
Ciao

#include<iostream>
using namespace std;
#include<stdlib.h>

void input(int&riemp,float vett[]);
void fricmin(int riemp,float vett[],float &minimo,int &quanti,int p
int n,k,pos[100];
float min;

}
}
}



anno valore uguale al minimo e in quali posti si trovano nel vetore.
come primo errore strano mi porta :ve lo indico con "*" perchè?

grazie e abbiate pasienza


ho avito l'illuminazione, grazie cmq.;)

Bandit
11-12-2004, 19:09
però

#include<iostream>
using....... posto[quanti]=i;
}
}
}
}

eseguendolo al terzo cout di quando sio esegue il prog mi esce un 0 in +: date 10 poi 2 3 4 2 5 6 8 9 2 dovrebbe uscire0 3 7, però mi da 0 0 3 7.

Bandit
07-01-2005, 11:43
Mi aiutate con questo problema:
/*Si scriva un programma che, assegnato in ingresso un insieme di riemp valori
float ad un vettore vett, calcoli:
- il prodotto degli elementi del vettore;
- quanti elementi del vettore e' necessario sommare, nell'ordine dal primo in poi,
per raggiungere un valore della somma >=S, con S assegnato in ingresso;
si visualizzino quindi i valori calcolati.
Di ogni elemento del vettore, si calcoli inoltre la radice quadrata in due modi
distinti: utilizzando la funzione di libreria sqrt ed utilizzando l'algoritmo per il
calcolo della radice quadrata come limite di una successione, con precisione assegnata.
Si produca quindi, sul supporto di uscita, una tabella che per ogni valore vett[i]
riporti i valori di sqrt(vett[i]) e della radice di vett[i] calcolata nel secondo modo.
Il programma deve essere articolato in funzioni (ad es.: input,output, somma,
prodotto, radquad1, radquad2). Suggerimento: ad es. la funzione prodotto riceve in
ingresso il vettore ed il suo riempimento e restituisce il valore del prodotto
al nome della funzione.


void input(int&n,float v[]);
int num_somma(int n,float v[],float S);
float prodotto(int n,float v[]);
void radquad1(int n,float v[],float RQ1[]);
void radquad2(int n,float v[],float RQ2[],float E);
void output_tabella(int n,float v[],float RQ1[],float RQ2[]);

int main()
{
int riemp;
float vett[100];
float rad1[100]; float rad2[100];
float Err,S;
void input(int&n,float v[]);

input(riemp,vett);
cout<<"\nassegna valore float all'errore";
cin>>Err;
cout<<"\nassegna valore alla soma S";
cin>>S;
cout<<"\nilnumero di elementi da sommare per raggiungere un valore >= a "<<S<<"e\'= a "<<num_somma (riemp,vett,S);
cout<<"\nil prodotto degli elementi del vettore è = "<<prodotto(riemp,vett);
cout<<"\n";
num_somma (riemp,vett,S);
prodotto(riemp,vett);
radquad1(riemp,vett,rad1);
radquad2(riemp,vett,rad2,Err);
output_tabella(riemp,vett,rad1,rad2);

system("PAUSE");
return 0;
}
void input(int&n,float v[])
{int i;
cout<<"\nassegna valore int al numero di elementi n, del vettore\n";
cin>>n;
cout<<"\nAssegna "<<n<<" valori float a vett\n";
for(i=0;i<n;i++);
cin>>v[i];
}
int num_somma(int n,float v[],float S)
{
float som=0; int i=0;
do
{
som=som+v[i];
i++;
}while((i<n)&&(som<S));
return i;
}

float prodotto(int n,float v[])
{
float prod=1; int i;
for(i=0;i<n;i++)
prod=prod*v[i];
return prod;
}
void radquad1(int n,float v[],float RQ1[])
{ int i;
for(i=0;i<n;i++)
RQ1[i]=sqrt(v[i]);
}
void radquad2(int n,float v[],float RQ2[],float E)
{ float Rqprec;int i;
for(i=0;i<n;i++);
RQ2[i]=1;
do{

Rqprec=RQ2[i];
RQ2[i]=(RQ2[i]+v[i]/RQ2[i])/2;
}while(fabs(RQ2[i]-Rqprec)>E);
}


void output_tabella(int n,float v[],float RQ1[],float RQ2[])
{int i;
cout<<"\nv[i]\t\t\tRQ1[i]\t\t\tRQ2[i]\n";
for(i=0;i<n;i++)
cout<< v[i]<<"\t\t"<<RQ1[i]<<"\t\t"<<RQ2[i]<<"\n";
}

Mi escono radici con numeri con la e, e poi non riesco a mettere il valore della somma.

anx721
07-01-2005, 15:40
Originariamente inviato da beppegrillo
Secondo te questa cosa che fà?
X-C/B;

ti dò un consiglio. anzichè copiare codice da altre parti cerca di capire come funziona, in questo modo errori banali come questi li eviteresti sicuramente...


X-C/B;

è un'istruzione sintatticamente e semanticamente corretta in qualsiasi programma c/c++, in cui X, C e B siano state dichiarati come variabili numeriche come in questo caso; difatti X-C/B è semplicemente un'espressione, e in c/c++ una simgola espressione puo essere utilizzata come istruzione a sè stante; in esecuzione l'espressione viene valutata e il risultato prodotto è scartato.

beppegrillo
07-01-2005, 16:18
Originariamente inviato da anx721
X-C/B;

è un'istruzione sintatticamente e semanticamente corretta in qualsiasi programma c/c++, in cui X, C e B siano state dichiarati come variabili numeriche come in questo caso; difatti X-C/B è semplicemente un'espressione, e in c/c++ una simgola espressione puo essere utilizzata come istruzione a sè stante; in esecuzione l'espressione viene valutata e il risultato prodotto è scartato.
Ok, ma qual'è lo scopo? Che senso ha?

-Yara-
07-01-2005, 16:34
Salve a tutti....sono anche io un po alle prime armi con il c/c++ (faccio la 3za itis).
Vorrei capire perchè questo programma non funziona:
#include <stdio.h>

int main()
{
const int dim=3;
int numero[dim],i=0;
float totale,media;

for(i=0;i<=dim;i++){
printf("\nInserisci");
scanf("%d",numero[i]);
totale+=numero[i];
}
media=totale/dim;
printf("\n%f",media);
}

In particolare come valore la media assume sempre 50766.66796...ma non capisco il perchè :(
P.S. sto compilando in linux con gcc se puo servire

beppegrillo
07-01-2005, 16:43
Originariamente inviato da -Yara-
Salve a tutti....sono anche io un po alle prime armi con il c/c++ (faccio la 3za itis).
Vorrei capire perchè questo programma non funziona:
#include <stdio.h>

int main()
{
const int dim=3;
int numero[dim],i=0;
float totale,media;

for(i=0;i<=dim;i++){
printf("\nInserisci");
scanf("%d",numero[i]);
totale+=numero[i];
}
media=totale/dim;
printf("\n%f",media);
}

In particolare come valore la media assume sempre 50766.66796...ma non capisco il perchè :(
P.S. sto compilando in linux con gcc se puo servire
C'e' un uguale di troppo nel ciclo for, gli array in C/c++ partono da 0, tu accedi al 4 elemento che non esiste e vai in qualche cella di memoria non inizializzata ;)

-Yara-
07-01-2005, 16:46
E' vero! :muro:
Da 0 a n-1, giusto.
grazie ;)

Pero' ho un problema analogo con questo programma (compito per le vacanze..è in beta ancora :D)

/* Creare un programma che legga i voti di informatica della classe
3 vettori: 1 orale, 1 scritto, 1 pratica;
Fornire la media di tutti i voti, in scritto, orale e pratico. Il programma deve stampare il voto massimo,
minimo. */

#include <stdio.h>
#define dim 5
#define dim2 6

int main()
{
int orale[dim],scritto[dim],pratico[dim];
int min,max,temp[dim2],i;
float totale,totale1,totale2;
float media,media1,media2;

for(i=0;i<dim;i++)
{
printf("\nInserire il voto orale numero %d",i); printf(" ");
scanf("%d",&orale[i]);
if(i==0)
{
min=orale[i];
max=orale[i];
}
if(orale[i]<min)
{orale[i]=temp[0];}
if(orale[i]>max)
{orale[i]=temp[1];}
totale=totale+orale[i];
}

for(i=0;i<dim;i++)
{
if(i==0)
{
min=scritto[i];
max=scritto[i];
}
printf("\nInserire il voto scritto numero %d",i); printf(" ");
scanf("%d",&scritto[i]);
if(orale[i]<min)
{scritto[i]=temp[2];}
if(orale[i]>max)
{scritto[i]=temp[3];}
totale1=totale1+scritto[i];
}

for(i=0;i<dim;i++)
{
printf("\nInserire il voto pratica numero %d",i); printf(" ");
scanf("%d",&pratico[i]);
if(i==0)
{
min=pratico[i];
max=pratico[i];
}
if(orale[i]<min)
{pratico[i]=temp[4];}
if(orale[i]>max)
{pratico[i]=temp[5];}
totale2=totale2+pratico[i];
}

media=totale/dim;
media1=totale1/dim;
media2=totale2/dim;
printf("\nLa media in orale e' %f ",media);
printf("\nLa media in scritto e' %f ",media1);
printf("\nLa media in pratico e' %f ",media2);
printf("\nIl voto minimo in orale e'"); printf("%d",temp[0]);
printf("\nIl voto massimo in orale e'"); printf("%d",temp[1]);
printf("\nIl voto minimo in scritto e'"); printf("%d",temp[2]);
printf("\nIl voto massimo in scritto e'"); printf("%d",temp[3]);
printf("\nIl voto minimo in pratico e'"); printf("%d",temp[4]);
printf("\nIl voto massimo in pratico e'"); printf("%d",temp[5]);
return;
}

Ps. volendo per rappresentare quei totale,toale1,totale2 e media,media1,media2, potrei usare un vettore? Per esempio definisco una costante e gli do valore 3...
e faccio totale[0],totale[1] ecc...?

beppegrillo
07-01-2005, 17:00
Originariamente inviato da -Yara-

for(i=0;i<dim;i++)
{
printf("\nInserire il voto orale numero %d",i); printf(" ");
scanf("%d",&orale[i]);
if(i==0)
{
min=orale[i];
max=orale[i];
}
if(orale[i]<min)
{orale[i]=temp[0];}
if(orale[i]>max)
{orale[i]=temp[1];}
totale=totale+orale[i];
}

[/code]


C'è un errore concettuale, ovvero cosa succede se il minimo stà in prima posizione? Succede che lo salvi in min e non in temp[0], quindi ti fornirà risultati errati.
Originariamente inviato da -Yara-
Ps. volendo per rappresentare quei totale,toale1,totale2 e media,media1,media2, potrei usare un vettore? Per esempio definisco una costante e gli do valore 3...
e faccio totale[0],totale[1] ecc...?

Certo anzichè utilizzare n variabili usi un array di dimensione n :D

-Yara-
07-01-2005, 17:08
Originariamente inviato da beppegrillo
C'è un errore concettuale, ovvero cosa succede se il minimo stà in prima posizione? Succede che lo salvi in min e non in temp[0], quindi ti fornirà risultati errati.


scusa non ho capito..cosa intendi per miniomo? la variabile min oppure un numero minimo?
E cosa significa in prima posizione?
Grazie :D

beppegrillo
07-01-2005, 17:14
Originariamente inviato da -Yara-
scusa non ho capito..cosa intendi per miniomo? la variabile min oppure un numero minimo?
E cosa significa in prima posizione?
Grazie :D
Errore di digitazione, intendevo minimo.
Per prima posizione intendo, che se i voti orali sono 2 3 4, vedi che qualcosa non ti funzionerà :D

Bandit
07-01-2005, 18:13
ma il mio ultimo problema?sto cercando un aiutino...

Bandit
08-01-2005, 08:59
Mi aiutate con questo problema:
/*Si scriva un programma che, assegnato in ingresso un insieme di riemp valori
float ad un vettore vett, calcoli:
- il prodotto degli elementi del vettore;
- quanti elementi del vettore e' necessario sommare, nell'ordine dal primo in poi,
per raggiungere un valore della somma >=S, con S assegnato in ingresso;
si visualizzino quindi i valori calcolati.
Di ogni elemento del vettore, si calcoli inoltre la radice quadrata in due modi
distinti: utilizzando la funzione di libreria sqrt ed utilizzando l'algoritmo per il
calcolo della radice quadrata come limite di una successione, con precisione assegnata.
Si produca quindi, sul supporto di uscita, una tabella che per ogni valore vett[i]
riporti i valori di sqrt(vett[i]) e della radice di vett[i] calcolata nel secondo modo.
Il programma deve essere articolato in funzioni (ad es.: input,output, somma,
prodotto, radquad1, radquad2). Suggerimento: ad es. la funzione prodotto riceve in
ingresso il vettore ed il suo riempimento e restituisce il valore del prodotto
al nome della funzione.

#include<iostream>
#include <stdlib.h>
#include<math.h>
using namespace std;

void input(int&n,float v[]);
int num_somma(int n,float v[],float S);
float prodotto(int n,float v[]);
void radquad1(int n,float v[],float RQ1[]);
void radquad2(int n,float v[],float RQ2[],float E);
void output_tabella(int n,float v[],float RQ1[],float RQ2[]);

int main()
{
int riemp;
float vett[100];
float rad1[100]; float rad2[100];
float Err,S;
void input(int&n,float v[]);

input(riemp,vett);

cout<<"\nassegna valore alla soma S";
cin>>S;
cout<<"\nilnumero di elementi da sommare per raggiungere un valore >= a "<<S<<"e\'= a "<<num_somma (riemp,vett,S);
cout<<"\nil prodotto degli elementi del vettore è = "<<prodotto(riemp,vett);
cout<<"\n";
num_somma (riemp,vett,S);
prodotto(riemp,vett);
radquad1(riemp,vett,rad1);
radquad2(riemp,vett,rad2,Err);
output_tabella(riemp,vett,rad1,rad2);

system("PAUSE");
return 0;
}
void input(int&n,float v[])
{int i;
cout<<"\nassegna valore int al numero di elementi n, del vettore\n";
cin>>n;
cout<<"\nAssegna "<<n<<" valori float a vett\n";
for(i=0;i<n;i++);
cin>>v[i];
}
int num_somma(int n,float v[],float S)
{
float som=0; int i=0;
do
{
som=som+v[i];
i++;
}while((i<n)&&(som<S));
return i;
}

float prodotto(int n,float v[])
{
float prod=1; int i;
for(i=0;i<n;i++)
prod=prod*v[i];
return prod;
}
void radquad1(int n,float v[],float RQ1[])
{ int i;
for(i=0;i<n;i++)
RQ1[i]=sqrt(v[i]);
}
void radquad2(int n,float v[],float RQ2[],float E)
{ float Rqprec;int i;float Err;
for(i=0;i<n;i++);
RQ2[i]=1;
cout<<"\nassegna valore float all'errore";
cin>>Err;
do{

Rqprec=RQ2[i];
RQ2[i]=(RQ2[i]+v[i]/RQ2[i])/2;
}while(fabs(RQ2[i]-Rqprec)>E);
}


void output_tabella(int n,float v[],float RQ1[],float RQ2[])
{int i;
cout<<"\nv[i]\t\t\tRQ1[i]\t\t\tRQ2[i]\n";
for(i=0;i<n;i++)
cout<< v[i]<<"\t\t"<<RQ1[i]<<"\t\t"<<RQ2[i]<<"\n";
}



è importante

cionci
08-01-2005, 12:54
Vedo che non hai seguito il mio consiglio su endl...

Comunque se non ci dici dov'è il problema secondo me otterrai ben pochi consigli...

Cerca di isolare il problema (se non sai usare il debugger modifica ilc odice ad hoc per testare una singola funzione o un singolo pezzo di codice)

Bandit
08-01-2005, 13:56
Originariamente inviato da cionci


Cerca di isolare il problema (se non sai usare il debugger modifica ilc odice ad hoc per testare una singola funzione o un singolo pezzo di codice)

che significa?come si fa?


e poi c'è una differenza tra \n ed endl ma fin quando nessuno me la dice io applicherò sempre \n......

cionci
08-01-2005, 14:51
\n non si usa nell'output di testo perchè non tutti i sistemi operativi utilizzano il solo \n per andare a capo...

Per testare una sola funzione:

int funzionedatestare(int c, float b, int a)
{
....
}

int main()
{
....
cout << funzionedatestare(10, 2.0, 3);
...
}

Inoltre non si scrive mai l'intero programma senza aver testato precedentemente le funzioni principali...

Bandit
08-01-2005, 15:38
Originariamente inviato da cionci
\n non si usa nell'output di testo perchè non tutti i sistemi operativi utilizzano il solo \n per andare a capo...

Per testare una sola funzione:

int funzionedatestare(int c, float b, int a)
{
....
}

int main()
{
....
cout << funzionedatestare(10, 2.0, 3);
...
}

Inoltre non si scrive mai l'intero programma senza aver testato
precedentemente le funzioni principali...


int funzionedatestare(int c, float b, int a)
{
....
}

dove la devo digitare?che c'entra col debug?
come si fa a testare le funzioni principali?col debug?scusami, ma non sono molto pratico

pinzi
09-01-2005, 12:42
La funzione input va corretta in questo modo:

void input(int&n,float v[])
{int i;
cout<<"\nassegna valore int al numero di elementi n, del vettore\n";
cin>>n;
cout<<"\nAssegna "<<n<<" valori float a vett\n";
for(i=0;i<n;i++){
cin>>v[i];
};
}

inoltre l' algoritmo che tu stai usando per calcolare la radice quadrata non è corretto. Controlla questo link:

http://www.geocities.com/cnowlen/Cathy/Emat4680/Squareroot.htm

cionci
10-01-2005, 06:17
Originariamente inviato da Bandit
int funzionedatestare(int c, float b, int a)
{
....
}

dove la devo digitare?che c'entra col debug?
come si fa a testare le funzioni principali?col debug?scusami, ma non sono molto pratico
funzionedatestare va sostituita con una qualunque delle funzioni di cui non sei sicuro del funzionamento...richiamandola con dei parametri ad hoc puoi vedere se il risultato è coerente con il problema dato...

Bandit
10-01-2005, 12:49
Originariamente inviato da cionci
con dei parametri ad hoc puoi vedere se il risultato è coerente con il problema dato...
"ad hoc": quali?

cionci
10-01-2005, 14:25
Originariamente inviato da Bandit
"ad hoc": quali?
Dipende dal problema...parametri con cui tu sai già il comportamento che deve tenere la funzione...

Ad esempio puoi passare 4 alla funzione che calcola la radice quadrata e il risultato dovrà essere due... Oppure gli passi il un numero negativo epr vedere come si comporta...oppure un qualsiasi altro numero di cui conosci la radice quadrata...

chetidolanimale
10-01-2005, 19:08
volevo provare a correggere il programma per il calcolo della radice(oramai non gli servirà più,ma è solo per mettermi un po' alla prova con qualcosa di facile :) );io l'avrei fatto così:


#include<iostream>
using namespace std;
#include<stdlib.h>
#include<math.h>

int main()
{
float x;
char ripeti;


do
{
cout<<"assegna valore ad x\n";
cin>>x;
if(x>=0)
{
cout<<"il risultato della radice è r="<<sqrt(x)<<"\n";
}
else {
cout<<"\nla radice è impossibile";
}
cout<<"\nvuoi continuare? s/n\t";
cin>>ripeti;
}while(ripeti=='s');

system("PAUSE");
return 0;
}


che ne dite?:)

Bandit
31-01-2005, 17:23
mi sapete dire che cosa è la funzione di casting?

pinzi
31-01-2005, 17:37
Quando hai un oggetto y di una classe Y che è stata ereditata da una classe X il casting ti permette di convertire y in un oggetto x della classe X.

Bandit
31-01-2005, 17:41
vediamo se ho capito p.e.:
si usa se ho fissato le variabili in un modo(=tipo), ed in uno specifico caso c'è bisogno di calcolarlo in un qaltro tipo.
ho capito bene?

Bandit
01-02-2005, 09:37
ho capito si o no?

pinzi
01-02-2005, 10:34
Esatto ecco un esempio:

class Base
{
public:
Base() : _data(999) {}
int Data() const {return _data;}
private:
int _data;
};

class Derived : private Base
{
public:
Derived () : Base() {}
};

Derived* d1 = new Derived;

/*
Tu non puoi accedere al metodo data tramite d1 perchè è un metodo privato di Base. Allora devi eseguire un casting:
*/

Base* b1 = (Base*) d1;
int i = b1->Data();

Bandit
01-02-2005, 11:10
grazie

cionci
01-02-2005, 11:59
Originariamente inviato da pinzi
Base* b1 = (Base*) d1;
int i = b1->Data();
Comunque se uno progetta in questo modo fa prima a cambiare lavoro ;)

Il casting è in generale quando si convertire da un tipo ad un'altro...

Bandit
01-02-2005, 12:01
Originariamente inviato da cionci
Comunque se uno progetta in questo modo fa prima a cambiare lavoro ;)

Il casting è in generale quando si convertire da un tipo ad un'altro...
allora ti faccio anche io la stessa domanda che ho fatto prima.
dicendo:"si usa se ho fissato le variabili in un modo(=tipo), ed in uno specifico caso c'è bisogno di calcolarlo in un qaltro tipo."
ho capito bene?

cionci
01-02-2005, 12:11
Sì...ad esempio:

int a = b/c + d/e;

Se tutte le variabili sono intere entrambe le divisioni avvengono in maniera intera...

Se faccio una cosa del genere:

int a = (double)b/c + (double)d/e;

convertirò b e d in double e verrà fatta una divisione double...
In questo caso la somma avverrà fra i due risultati double, poi il risultato double della somma sarà convertito implicitamente (senza specificare (int)) in int per essere immesso dentro a...

Quello con scritto (double) è un casting esplicito...
Quello che avviene sull'operatore = è un casting implicito...

Bandit
01-02-2005, 12:22
Ok;)