Program liczący objętość walca
Program liczący objętość walca
-
Użytkownik
- Siła reputacji
- 9
Program liczący objętość walca
Otóż zrobiłem programik ,który liczy objętość walca, zapętliłem go także. Mam pytanie jak wygląda instrukcja, która gdy użytkownik wpisuje promień i wysokość sprawdzała by czy wpisuje liczby. W przeciwnym razie gdyby użytkownik wpisał np. jakąś litererę toby wyświetliła komunikat.
#include <cstdlib>
#include <iostream>
#include<conio.h>
using namespace std;
main()
{
cout<<"Program liczacy objetosc walca.Przyblizenie liczby pi wynosi 3,14"<<endl;
int Wysokosc;
int Promien;
float Objetosc;
cout<<"Podaj wysokosc";
cin>>Wysokosc;
cout<<"Podaj promien";
cin>>Promien;
Objetosc=3.14*Promien*Promien*Wysokosc;
cout<<"Objetosc wynosi:"<<Objetosc<<endl;
//Na dole jest petla
for (int i = 1; i <= 1000; i++)
{
int odpowiedz;
cout<<"Czy chcesz policzyc objetosc jeszcze raz?tak(1) czy nie(dowolny znak)";
cin>>odpowiedz;
if(odpowiedz==1)
{
cout<<"Podaj wysokosc";
cin>>Wysokosc;
cout<<"Podaj promien";
cin>>Promien;
Objetosc=3.14*Promien*Promien*Wysokosc;
cout<<"Objetosc wynosi:"<<Objetosc<<endl;
}
else
{
cout<<"Dziekuje za wspolprace";
getch();
break;
}
}
}
|
Uwaga: To jest stary temat Ta dyskusja jest starsza niż 90 dni. Informacje w niej zawarte mogą już nie być aktualne |
|
-
Odp: Program liczący objętość walca
Kod:
#include <iostream>
#include <limits>
int main()
{
int a;
while(!(std::cin >> a))
{
std::cerr << "blad strumienia" << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
std::cout << a;
return 0;
}
albo czytaj do string'a ale jest to o wiele brzydszym rozwiązaniem.
-
Użytkownik
Założyciel Tematu
- Siła reputacji
- 9
Odp: Program liczący objętość walca
A mógłby ktoś bardziej wytłumaczyć ten kawałek:
while(!(cin >> a))
{
cerr << "blad strumienia" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
Dopiero skończyłem instrukcje sterujące. Nie rozumiem co oznacz ten ! w while i jaki jest warunek przerwania pętli. Nie wiem też co oznaczają te dalsze intrukcje. Bardzo proszę o wyltłumaczenie.
-
Odp: Program liczący objętość walca
Kod:
int main()
{
int b;
bool a = cin >> b;
cout << boolalpha << a;
return 0;
}
1. zobacz jaką wartość przyjmuje zmienna 'a' w zależności od stanu strumienia, czyli wprowadź poprawne dane oraz złe (np litery) i zobacz co wypisze. Pętla while wykonuje się do momentu gdy logiczne działanie w jego warunku nie przyjmie fałszu (czyli wykonuje się gdy jest prawdziwe) Operator "!" jest logicznym operatorem negacji.
2. cerr standardowy strumień błędów, możesz spokojnie zamienić na cout.
3. cin.clear(); - w momencie gdy strumień znajduje się w stanie błędu ustawia tzw flagę błędu. wywołanie cin.clear() (jako argument domyślny przyjmuje goodbit) oznacza usunięcie wszystkich flag błędów.
4. cin.ignore() (w powyższej postaci) usuwa ze strumienia znaki do jego końca lub do napotkania znaku nowej linii.
Na przyszłość zachęcam do skorzystania z poniższej strony:
Kod:
http://www.cplusplus.com/reference/
co do clear:
http://www.cplusplus.com/reference/iostream/ios/clear/
oraz ignore:
http://www.cplusplus.com/reference/iostream/istream/ignore/
limits znajdziesz już sobie sam w podanym linku (jeśli cie to zainteresuje)
pozdrawiam
-
Użytkownik
Założyciel Tematu
- Siła reputacji
- 9
A znasz może jakieś polskie strony na temat tego ??Mój angielski nie jest dostatecznie dobry by zajmować się takimi dziedzinami.
P.S Czyli można by też tak powiedzieć, że po podaniu przez nas zmiennej, program jeżeli jest to liczba widzi true, ale operator negacji zmienia to na false i instrukcja nie jest wykonywana. Jeśli napiszemy jakieś słowa to while uznaje jako false, a operator zmienia na true i instrukcja jest wykonywana
P.S 2
Przekształciłem ten program, działa jak pierwszy
#include <iostream>
#include <limits>
#include <conio.h>
using namespace std;
int main()
{
int a;
while(!(cin >> a))
{
cerr << "blad strumienia" << endl;
goto tutaj;
}
cout<<a;
tutaj:
getch();
return 0;
}
Ostatnio edytowane przez polkom21 ; 25.03.2011 o 16:06
Powód: §II.7. Pisanie post pod postem zamiast edycji posta.
-
Odp: Program liczący objętość walca
Strzeż się goto, najlepiej nigdy go nie używaj. Gdyby nie było tego operatora negacji, to program wciąż by cie prosił o podanie danych do czasu gdy nie pojawi się błąd lub strumień nie napotka eof.
Ostatnio edytowane przez matek3005 ; 24.03.2011 o 22:35
-
Użytkownik
Założyciel Tematu
- Siła reputacji
- 9
Odp: Program liczący objętość walca
Szczerze mówiąc nie wiem jak zastąpić to goto. Mógłbyś powiedzieć jakiej instrukcji należy użyć i czemu tego goto mam się strzec?
-
Odp: Program liczący objętość walca

Zamieszczone przez
kolarz3
Szczerze mówiąc nie wiem jak zastąpić to goto. Mógłbyś powiedzieć jakiej instrukcji należy użyć i czemu tego goto mam się strzec?
Nie wiem co próbujesz osiągnąć. Masz narzędzia teraz pomyśl jak ich użyć. Na tym polega programowanie.
pozdrawiam.
-
Użytkownik
Założyciel Tematu
- Siła reputacji
- 9
Odp: Program liczący objętość walca
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int a;
while(!(cin >>a) )
{
cout << "blad strumienia" << endl;
getch();
break;
}
if(a=false)
{
cout<<a;
getch();
}
return 0;
}
Stworzyłem coś takiego. Jest tylko jeden problem. Gdy podaje złe dane to wszystko jest ok. Ale gdy zmienną jest liczba dzieje się coś dziwnego. Program nie wykonuje żadnej instrukcji. Powinien wykonać instrukcje if, ponieważ w instrukcji while liczba otrzymuje wartość false, a dzięki temu potwierdzony jest warunek że a = false.
-
Odp: Program liczący objętość walca
W if powinieneś stosować operator porównania, a nie przypisania. Żeby nie robić takich błędów możesz warunek zapisać tak:
wtedy się to nawet nie skompiluje przez co od razu dostrzeżesz błąd.
Oczywiście poprawnie wyglądać to powinno tak:
Kod:
if(false == a)
lub if(a == false)
-
Użytkownik
Założyciel Tematu
- Siła reputacji
- 9
Odp: Program liczący objętość walca
Dałem znak równości i ten sam problem co poprzednie. Postanowiłem zrobić coś takiego if(!(a==false)) i z wielkim zdziwieniem okazało się, że liczba przed instrukcją if ma wartość true i do tego nie wykonuje instrukcji while. Czemu tak się dzieje?
-
Odp: Program liczący objętość walca
Kolego, weź jakąś książeczkę do c++ i poczytaj bo tak to ja ci mogę odpowiadać w nieskończoność, a nie o to tu chodzi. Ty do zmiennej 'a' wprowadzasz dane z wejścia więc jeśli podasz wartość różną od zera, zmienna 'a' będzie zawsze miała wartość 'true' (bo tak to już jest, że 0 == false) - spróbuj przypisać 'a' 0 na wejściu i zobacz czy warunek po pętli się wykona czy nie. Natomiast while wykonuje się tylko raz bo nie czyścisz flagi błędu oraz bufora - pisałem ci wyżej jak to masz robić to mnie olałeś.
W każdym bądź razie uzyskałeś pomoc, o którą prosiłeś więc jak dla mnie jest eot.
pozdrawiam
-
-
Porno na komórke., banjo hack do metin2, peja slums attack peb, chessmaster 10th edition polskie dialogi, pismo do sekretarza miasta, Akademia Wojskowa - Combat High 1986 DVDRip XviD Lektor PL, ancient asian sex secrets precyl, przepis na życie odc 1 sezon 2 do ściągnięcia, król lew 2 ściągnij, dwa obrazy polskiej szlachty u paska i sienkiewicza. podobne czy rozne?, grubson muzyka download, cisco 4.0 odpowiedzi chomikuj, program windows 98 po polsku do pobrania, esi tronic 2011 fileserve, na stronach internetowych w komputerze nie ma głosu, the thing 2 torrent donaload, rapidshare top 100 italo, gwiazdy kina porno, pokemon firered download peb, keygan embrance do photoshopa cs5 nie dziala, tokyo paradise ska orchestra peb, wiedźmikołaj part2 online, elfy strategia, specjalista ds rejestracji leków since pharma, wojna smoków lektor pl rapid, hipnotyczny marketing / joe vitale download, tnodrapidshare
Tagi dla tego wątku
Uprawnienia umieszczania postów
- Nie możesz zakładać nowych tematów
- Nie możesz pisać wiadomości
- Nie możesz dodawać załączników
- Nie możesz edytować swoich postów
-
Zasady na forum
Znajdziesz nas na: