-
.
ragazzi sono ancora io ....su questo forum mi siete sembrati molto disponibili e vi ringrazio......ho un problema con un programma,è la traccia d'esame di qualche mese fa ma non ho idea di come si faccia,qualcuno può farmelo vedere e magari spiegare?non so come si fa quando si deve usare una serie.....
la traccia è:
trovare un'approssimazione di pigreco sfruttando la serie [ (-1^n)*(4/(2n+1))] ,e stampare una tabella dove all'iterazione n si associa il valore parziale di pigreco trovato
grazie a chi mi risponde. -
Guglielmoqwerty.
User deleted
Sempre in C++ giusto? . -
.
si sempre in c++..purtroppo l esame si fa in c++ . -
Guglielmoqwerty.
User deleted
Non possodarti direttamente tutta a classe ma se mi dai una delucidazione ti posso fare la maggior parte (con annessa spiegazione). Quali valori deve avere n? Per quello che ho capito dovrei prima dargli valore 1, poi 2, poi 3 etc, fino ad un valore limite giusto? . -
.Non possodarti direttamente tutta a classe ma se mi dai una delucidazione ti posso fare la maggior parte (con annessa spiegazione). Quali valori deve avere n? Per quello che ho capito dovrei prima dargli valore 1, poi 2, poi 3 etc, fino ad un valore limite giusto?
il mio prof è un idiota quindi le sue tracce il più delle volte sono incomprensibili...questa traccia è di febbraio 2013 e ogni tanto le "ricicla" le tracce...a esser sinceri a me o 18 o 30elode non cambia niente,tanto è l'ultimo esame...e mi dici che non puoi mettermi il codice intero,ma io in fondo non sono un programmatore a me di programmare non me ne frega,mi basta solo passare l'esame con ogni mezzo lecito o meno...capisci quello che dico,mettiti nei miei panni.....
per quanto riguarda il valore di n,credo che vada inserito da tastiera,credo..comunque grazie del codice(grazie in anticipo) e grazie,a te e anche a gli altri che rispondono/risponderanno alle mie domande..domande che per voi magari sono stupide,ma per me sono l'esatto opposto......
grazie. -
Guglielmoqwerty.
User deleted
Stupide? Poche cose sono veramente stupide, molte altre vengono considerate tali solo perché sí è capaci di farle e non si pensa a chi ha appena cominciato. Pensa solo al parlare, sembra ovvio, ma per i bambini piccoli non è cosi.
Comunque, ho guardato su internet e non riesco a trovare questa formula (e anche pensandoci per valori dispari di n non avrebbe senso). Ricontrolla bene l'esercizio.
Oltre a questo, supponendo (probabilmente per assurdo) che la formula sia corretta la funzione sarebbe:CODICE//sostituendo il nome del metodo con main il programma funziona ma non vorrei che fosse un atteggiamento da C
void stampaPI(int numeroMassimo) //indico il Massimo valore di PI
{
int n=0; //numero
int pi;
while(n<=numeroMassimo)
{
if(n%2==0){ pi=1; } //se l'esponente è pari il numero è positivo
else { pie-1; } //altrimenti negativo. NDR: ogni potenza di -1 ha modulo 1
pi=pi*(4/(2*n+1)); //applico la formula
printf("Il valore di PI con n pari a %d e' %lf",n,pi); //Stampo del testo esplicativo
n++;
}
}
OK, scritto. Per sicurezza prova a compilarlo perché scrivo con il tablet e non è il Massimo. A casa ricontrollo. (Robot, dagli un occhiata anche tu ). -
.
purtroppo la serie è quella,l ho scritta giusta...sta scritta così sulla traccia.....per cortesia,appena puoi,me lo scrivi il programma intero non solo una parte..ora sto sul telefonino e sto andando a giocare a pallone...poi quando torno mi preparo e stasera scendo quindi prima di domani non credo di poter controllare se funziona o meno..spero di essermi spiegato..lo dici anche tu che la serie è strana,ma il mio prof è un idiota,in dipartimento lo sanno tutti ma nn possono cacciarlo perchè ha agganci buoni...per curiosità mia,ma tu cosa sei?programmatore,studente universitario,liceo?cosa?è una curiosità?
grazie. -
Guglielmoqwerty.
User deleted
Studente di liceo sciebtifico tradizionale che si diletta con l'informatica. (mi hanno sempre quei cosi con tante lucine )
Per far funzionare il programma basta aggiungere sotto a ciò che ti ho scritto (dopo la parentesi chiusa)Il mio dubbio era un altro, ma ho controllato, non c'é niente di particolare da fare =)CODEint main() { stampaPI(numeroMassimo); }. -
.
Quel codice non è proprio corretto comunque.
Il numero N non credo debba essere letto da tastiera, piuttosto è da trovare iterativamente in quanto devi trovare tu l'approssimazione.
Ora non sono a casa, ma domani sera magari riesco a scrivere qualcosa. ^^. -
.Quel codice non è proprio corretto comunque.
Il numero N non credo debba essere letto da tastiera, piuttosto è da trovare iterativamente in quanto devi trovare tu l'approssimazione.
Ora non sono a casa, ma domani sera magari riesco a scrivere qualcosa. ^^
infatti il programma scritto dall'amico non va,or ora ho controllato..il ragazzo è volenteroso ma è alle prime armi ..comunque RootkitNeo ti ringrazio e appena puoi posta il programma,ti ringrazio in anticipo...buona domenica. -
Guglielmoqwerty.
User deleted
Alle prime armi? Diciamo che per aiutarti mi sono improvvisato programmatore di C
Il programma completo comunque sarebbe (ho aggiunto un po' di cose che davo per scontate):SPOILER (clicca per visualizzare)CODICE#include <stdio.h>
void stampaPI(int numeroMassimo) //indico il Massimo valore di PI
{
int n=0; //numero
double pi;
while(n<=numeroMassimo)
{
if(n%2==0){ pi=1; } //se l'esponente è pari il numero è positivo
else { pi=-1; } //altrimenti negativo. NDR: ogni potenza di -1 ha modulo 1
pi= pi*(4/ ( (double)(2*n+1)) ); //applico la formula
printf("Il valore di PI con n pari a %d",n); //Stampo del testo esplicativo
printf(" e' %lf \n",pi);
n++;
}
}
int main()
{
int numeroMassimo = 100;
stampaPI(numeroMassimo);
}
Il programma adesso compila e funziona ma la formula continua a non avere senso. Comincio a pensare di essermi perso qualcosa...
Comunque adesso è arrivato Root, ti lascio nelle sue mani (quindi in buone mani ). -
.
@Guglielmoqwerty: la formula postata è corretta, anche se non mi è ben chiaro se sia una variante della Leibniz o se è la stessa (non sono un gran matematico...).
Il numero che è necessario inserire, N, è in pratica il numero di iterazioni che si vogliono ottenere (avevo interpretato male il testo quando ho letto la volta precedente, in quanto pensavo ci si dovesse fermare quando si trovava un approssimazione). In questo caso quindi è semplice.
Ad ogni modo, con il codice che ho scritto riesci ad ottenere questa approssimazione:CODICE10000000 : 3.14159275358984
Se superi i 10 milioni armati di pazienza e fallo se hai tempo...CODICE#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
void findPi(int n) {
double pi = 0.0;
for(int i=0; i<=n; i++) {
pi += (double) ((pow(-1.,i))*(4./(2.*i+1)));
printf("%d : %.15g \n",i,pi);
}
}
int main() {
int n;
cout << "Inserire N: ";
cin >> n;
findPi(n);
return 0;
}
Il punto decimale indica appunto che il numero è decimale; allo stesso modo il .15g indica che accetta 15 cifre dopo la virgola.
Non so che valutino al tuo esame, ma credo faccia una buona impressione utilizzare le librerie di C++ e non del C (anche se con alcuni compilatori a quanto so non cambia moltissimo). In pratica le librerie del C sono in questo formato math.h, stdio.h, stdlib.h, in C++ quando sono a disposizione cstdio, cstdlib, cmath etc (e non dimenticarti mai using namespace std;, altrimenti non trova cout/cin).
Se puoi gestire l'input e l'output senza una particolare formattazione ti conviene utilizzare iostream e cin/cout; in caso contrario importi cstdio ed utilizzi printf come ho fatto io.
Per vedere l'output di quel programma al completo al momento dell'esecuzione ho dirottato l'output in un file di testo (verrà dirottato tutto l'output, quindi è compresa la stringa che richiede l'input), digitando:CODICEnomefile > out.txt
non aprirlo con Notepad.exe, ma aprilo con Notepad++ (o un altro editor di questo livello, altrimenti crasha il programma).
Un altra cosa Guglielmo, guarda quanto può essere più bello il tuo if:CODICEpi = (pi & 1) ? -1 : 1;. -
.@Guglielmoqwerty: la formula postata è corretta, anche se non mi è ben chiaro se sia una variante della Leibniz o se è la stessa (non sono un gran matematico...).
Il numero che è necessario inserire, N, è in pratica il numero di iterazioni che si vogliono ottenere (avevo interpretato male il testo quando ho letto la volta precedente, in quanto pensavo ci si dovesse fermare quando si trovava un approssimazione). In questo caso quindi è semplice.
Ad ogni modo, con il codice che ho scritto riesci ad ottenere questa approssimazione:CODICE10000000 : 3.14159275358984
Se superi i 10 milioni armati di pazienza e fallo se hai tempo...CODICE#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
void findPi(int n) {
double pi = 0.0;
for(int i=0; i<=n; i++) {
pi += (double) ((pow(-1.,i))*(4./(2.*i+1)));
printf("%d : %.15g \n",i,pi);
}
}
int main() {
int n;
cout << "Inserire N: ";
cin >> n;
findPi(n);
return 0;
}
Il punto decimale indica appunto che il numero è decimale; allo stesso modo il .15g indica che accetta 15 cifre dopo la virgola.
Non so che valutino al tuo esame, ma credo faccia una buona impressione utilizzare le librerie di C++ e non del C (anche se con alcuni compilatori a quanto so non cambia moltissimo). In pratica le librerie del C sono in questo formato math.h, stdio.h, stdlib.h, in C++ quando sono a disposizione cstdio, cstdlib, cmath etc (e non dimenticarti mai using namespace std;, altrimenti non trova cout/cin).
Se puoi gestire l'input e l'output senza una particolare formattazione ti conviene utilizzare iostream e cin/cout; in caso contrario importi cstdio ed utilizzi printf come ho fatto io.
Per vedere l'output di quel programma al completo al momento dell'esecuzione ho dirottato l'output in un file di testo (verrà dirottato tutto l'output, quindi è compresa la stringa che richiede l'input), digitando:CODICEnomefile > out.txt
non aprirlo con Notepad.exe, ma aprilo con Notepad++ (o un altro editor di questo livello, altrimenti crasha il programma).
Un altra cosa Guglielmo, guarda quanto può essere più bello il tuo if:CODICEpi = (pi & 1) ? -1 : 1;
grazie root,gentilissimo come sempre....
cosa valutano al mio esame?l'unica cosa che valutano,non essendo degli informatici,è se il programma compila o meno,può essere fatto anche benissimo ma non compila,anche per una virgola sbagliata,il prof senza se e senza ma ti manda...per le librerie,lui ci fa usare SOLO quelle del c++,e per quanto riguarda prinf io uso cout(e cin)..la parte dove sta prinf,col cout come la scrivo?perchè leggo n i e pi dentro al printf,e sinceramente non so come si usi questa funzione
grazie. -
.grazie root,gentilissimo come sempre....
cosa valutano al mio esame?l'unica cosa che valutano,non essendo degli informatici,è se il programma compila o meno,può essere fatto anche benissimo ma non compila,anche per una virgola sbagliata,il prof senza se e senza ma ti manda...per le librerie,lui ci fa usare SOLO quelle del c++,e per quanto riguarda prinf io uso cout(e cin)..la parte dove sta prinf,col cout come la scrivo?perchè leggo n i e pi dentro al printf,e sinceramente non so come si usi questa funzione
grazie
Bene, allora se non devi utilizzare printf (che è comunque molto semplice) devi importare iomanip. Il codice è il seguente:CODICE#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
void findPi(int n) {
double pi = 0.0;
for(int i=0; i<=n; i++) {
pi += (double) ((pow(-1.,i))*(4./(2.*i+1)));
cout << n << " : " << setprecision(16) << pi << endl;
}
}
int main() {
int n;
cout << "Inserire N: ";
cin >> n;
findPi(n);
return 0;
}
E' anche più semplice rispetto a prima. Il nome della funzione chiamata è piuttosto esplicativo, ad ogni modo: www.cplusplus.com/reference/iomanip/setprecision/
Quell'endl è il ritorno a capo.
Un ultima cosa: io casto esplicitamente a double per assegnare il valore a pi, ma il cast è inutile (puoi anche toglierlo, il risultato non cambia in quanto è già un double).
Se non vuoi usare nemmeno cmath, devi scrivere tu una tua funzione pow (ma non so quanto ti convenga...).
Prego.. -
.
grazie root..
cmat lo so usare,anche se il prof ci ha detto di usare math.h mah...
comunque quando scrivi pi += (double) ((pow(-1.,i))*(4./(2.*i+1)));
quel += (double) che significa?
+= che vuol dire?
e double devo metterlo x forza?nno ho già dichiarato che pi è una funzione di tipo double?.