PDA

View Full Version : Creare un programma C++


vincenzomancari
24-01-2014, 10:12
Ciao a tutti sono nuovo nel forum.
Sto cercando di fare questo programma per esercitarmi!!

Creare un programma che dato il raggio del cerchio di base di un cilindro e la sua altezza, calcoli e dia in output il peso di un cilindro sapendo che la sostanza di cui è composto ha peso specifico 3,4 g/cm3
volume= area di base * altezza;
peso= volume * peso specifico;

Io sono arrivato qui ma non so più cosa fare:

{
double r, h;
cout<<"inserire il raggio r:";
cin>>r;
cout<<"inserire l'altezza h:";
cin>>h;
cout<<"Volume= "<<3,14*r^2*h<<"\n\n";
.....
.....
.....
system("PAUSE");
return EXIT_SUCCESS;
}

sharkkk
24-01-2014, 10:27
<<"Volume= "<<3,14*r^2*h<<"\n\n";

visto che ti stai esercitando l'operazione 3,14*r^2*h prima di tutto dovresti scriverla con le giuste parentesi.
Tipo (x+(y+1))*z

poi quale sarebbe il problema? che non ti ritornano i risultati? se è cosi è probabile che siano proprio le parentesi inesistenti.

vincenzomancari
24-01-2014, 10:35
Ciao Sharkkk,
ho cambiato un po il tutto
dai un occhiata all'URL; mi da uno strano errore quando compilo!

https://drive.google.com/file/d/0B0a67nFiWVy2NGV6T0hMYnNuWVU/edit?usp=sharing

Grazieee :muro:

sharkkk
24-01-2014, 10:48
guarda se funziona cosi

#include <iostream.h>
#include <stdlib.h>

int main()
{
double r,h,a,v;

cout<<"inserisci a -> ";
cin>>r;
cout<<"\n r ="<<r<<"\n";

cout<<"inserisci h -> ";
cin>>h;
cout<<"\n h ="<<h<<"\n --------";

a=(3.14)*(r*r);
cout<<"\n a ="<<a<<"\n";

v= a*h;
cout<<"\n v ="<<v<<"\n";

system("PAUSE");
}

Per quegli errori non ne ho idea, lascio la parola a quelli molto piu esperti di me.

Per il resto ti posso dire che:
-non devi scrivere 3,14 ma 3.14
-alla funzione int main(..) non devi passare argomenti (int argc,char* ...) per l'esercizio che stai svolgendo. [si usa quello che hai scritto quando passi i parametri tramite shell per esempio, tipo ./esercizio 2 3]

vincenzomancari
24-01-2014, 10:54
Primo errore:
1[Error] iostream.h: No such file or directory

sharkkk
24-01-2014, 10:57
Primo errore:
1[Error] iostream.h: No such file or directory

:confused:

hai fatto copia incolla di quello che ti ho scritto e compilato oppure hai aggiunto qualcosa di tuo?

perche da me funziona esattamente con dev-c++ come te.

comunque prova ad aggiungere using namespace std; sotto l'include e a modificare #include <iostream.h> togliendoci il .h finale

#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
double r,h,a,v;

cout<<"inserisci a -> ";
cin>>r;
cout<<"\n r ="<<r<<"\n";

cout<<"inserisci h -> ";
cin>>h;
cout<<"\n h ="<<h<<"\n --------";

a=(3.14)*(r*r);
cout<<"\n a ="<<a<<"\n";

v= a*h;
cout<<"\n v ="<<v<<"\n";

system("PAUSE");
}

fammi sapere

vincenzomancari
24-01-2014, 11:06
Ho fatto copia incolla e ho tolto il .h prima che lo scrivevi ma c'è sempre lo stesso problema e forse ho capito di cosa si tratta.
Io utilizzo Windows 7, non è che devo modificare/ aggiungere qualcosa nelle opzioni di compilazione? sotto la voce strumenti!

sharkkk
24-01-2014, 11:10
Ho fatto copia incolla e ho tolto il .h prima che lo scrivevi ma c'è sempre lo stesso problema e forse ho capito di cosa si tratta.
Io utilizzo Windows 7, non è che devo modificare/ aggiungere qualcosa nelle opzioni di compilazione? sotto la voce strumenti!

anche io ho windows 7.

pero guardando il tuo screenshot vedo che hai creato un progetto e poi il sorgente .cpp.

prova a cliccare su FILE->NUOVO->FILE SORGENTE, incolli, compili, salvi, esegui

vincenzomancari
24-01-2014, 11:23
Grazieeeeeee adesso funzionaaa :D piango ahahah

però ho bisogno che mi chiarisci delle ultime cose:

Quando inserisco "a" (es. 3) perché lui fa r=3?
Un'altra cosa,
io adesso dovrei ricavare il peso del cilindro, che si trova facendo VOLUME * Peso specifico.
Come faccio a fare l'operazione? peso specifico= 3.4 g/cm3

sharkkk
24-01-2014, 11:29
Quando inserisco "a" (es. 3) perché lui fa r=3?

Perche per sbaglio ho fatto:

cout<<"inserisci a -> ";
cin>>r;

quando invece deve essere:

cout<<"inserisci r -> "; //visualizza su una shell la scritta inserisci r -> , tra " ... " perche è una stringa, ma volendo potresti visualizzare anche il valore di una variabile senza pero le ".."
cin>>r; //prende in input da shell (la finestra nera che ti appare) un valore che assegna alla variabile che tu hai inserito dopo cin>> , in questo caso la variabile double r


Per quanto riguarda il peso del cilindro dovresti usare le tue conoscenze di fisica, non so se devi convertire o fare altre cose :D
Se l'unità di misura del volume che hai trovato è g / cm3 allora puoi effettuare la moltiplicazione diretta ed è semplicissimo (VOLUME * 3,4), altrimenti devi convertire

vincenzomancari
24-01-2014, 11:39
MMmM ok l'ho fatto e funziona perfettamente!
Adesso sto facendo un altro esercizio, come potrei contattarti in caso di problemi? mi sei stato molto d'aiuto!

sharkkk
24-01-2014, 11:42
MMmM ok l'ho fatto e funziona perfettamente!
Adesso sto facendo un altro esercizio, come potrei contattarti in caso di problemi? mi sei stato molto d'aiuto!

scrivi qui sul forum, quello che puo essere d'aiuto a te puo essere d'aiuto agli altri come lo è stato per me (e lo è ancora:Prrr: )

comunque ti consiglio le tante guide che trovi su internet in italiano di c / c++ (io ti consiglio il primo per iniziare), di fare tanti esercizi e di non complicarti la vita scrivendo cose che non conosci altrimenti poi diventa tutto un grossissimo problema

vincenzomancari
24-01-2014, 12:23
Sharkkk tanto per cambiare ho avuto altri problemi con un nuovo programma:

Creare un programma che date le coordinate di due punti A(x0,y0) e B(x1, y1) di un sistema di riferimento cartesiano ortogonale Oxy, calcoli e dia in output la distanza tra i due punti.
( AB= radice di (x1 - x0)^2 + (y1 - y0)^2)

Ho fatto così io:


#include <iostream>
#include <stdlib.h>
#include <cmath>

using namespace std;

int main()
{
double x,y,x1,y1,d;

cout<<"inserisci la coordinata x -> ";
cin>>x;
cout<<"inserisci la coordinata y -> ";
cin>>y;

cout<<"inserisci la coordinata x1 -> ";
cin>>x1;
cout<<"inserisci la coordinata y1 -> ";
cin>>y1;

d=sqrt(x1-x)^2+(y1-y)^2;
cout<<"distanza tra A e B"<<d<<"\n";

system("PAUSE");
return EXIT_SUCCESS;
}

sharkkk
24-01-2014, 12:48
( AB= radice di (x1 - x0)^2 + (y1 - y0)^2)

sqrt(x1-x)^2+(y1-y)^2;

il problema qual'e? devi sempre scriverlo :)

sicuro che il problema non sia il solito problema delle parentesi?
sqrt(x1-x)^2+(y1-y)^2; non fa la radice di tutto ma la radice della prima parentesi, dovresti scrivere sqrt((( x1-x )^2 )+...)

sqrt(..) è come se fosse una funzione matematica f(x) che ti da un risultato. tu che x gli stai dando all funzione sqrt(x1-x)? gli stai dando x1-x e non (((x1-x)^2)+((y1-y)^2))). quindi il risultato della funzione sqrt(x1-x) sarà la radice di x1-x

vincenzomancari
24-01-2014, 12:56
Modificato ma non va! Guarda lo screen!

https://drive.google.com/file/d/0B0a67nFiWVy2M2ZNV2pfQVlfQXM/edit?usp=sharing

sharkkk
24-01-2014, 13:06
non va perchè l'elevamento a potenza in C sembra che non si faccia con x^y ma con una funzione che sta nella libreria math.h apposita. (ho verificato che poi funziona)

http://it.wikipedia.org/wiki/Math.h

vincenzomancari
24-01-2014, 13:16
Risoltooo.
Ecco formula completa

#include <iostream>
#include <stdlib.h>
#include <math.h>

using namespace std;

int main()
{
double x,y,x1,y1,d;

cout<<"inserisci la coordinata x -> ";
cin>>x;
cout<<"inserisci la coordinata y -> ";
cin>>y;

cout<<"inserisci la coordinata x1 -> ";
cin>>x1;
cout<<"inserisci la coordinata y1 -> ";
cin>>y1;

d=sqrt(exp(double(x1-x))+ exp(double(y1-y)));
cout<<"distanza tra A e B = "<<d<<"\n\n";

system("PAUSE");
return EXIT_SUCCESS;
}

sharkkk
24-01-2014, 13:19
piu semplice era se usavi la funzione pow(..)

d = sqrt((pow((x1-x),2)) + (pow((y1-y),2)));

pow(x,y) - eleva un valore dato ad esponente, x^y

vendettaaaaa
24-01-2014, 18:40
Risoltooo.
Ecco formula completa

#include <iostream>
#include <stdlib.h>
#include <math.h>

using namespace std;

int main()
{
double x,y,x1,y1,d;

cout<<"inserisci la coordinata x -> ";
cin>>x;
cout<<"inserisci la coordinata y -> ";
cin>>y;

cout<<"inserisci la coordinata x1 -> ";
cin>>x1;
cout<<"inserisci la coordinata y1 -> ";
cin>>y1;

d=sqrt(exp(double(x1-x))+ exp(double(y1-y)));
cout<<"distanza tra A e B = "<<d<<"\n\n";

system("PAUSE");
return EXIT_SUCCESS;
}
:asd:
Credo di aver capito cos'hai tentato di fare...
exp(double(x1-x)) secondo te dovrebbe essere equivalente a "prendi (x1 - x), e dagli un esponente pari a 2"... :D :D :D

Quello che hai fatto è corretto dal punto di vista della sintassi (infatti compila e va) ma in realtà stai calcolando l'esponenziale di (x1 - x).
double(numero) restituisce numero in formato double precision...non lo eleva al quadrato!
int a = 5;
double b = double(a); // converti a in un double
Quindi, dato che x1 e x sono già dei double, la conversione non ha effetto e stai calcolando exp( (x1 - x) ), cioè e^(x1 - x), che, nonostante e valga poco più di 2, è leggermente diverso da (x1 - x)^2...
Devi usare pow, come ti ha detto sharkkk.