amphiprion Temat założony przez niniejszego użytkownika |
Metody numeryczne - boki prostokąta » 2008-09-09 19:33:38 Otóż mam dosyć poważny problem. Muszę napisać program, który za pomocą metod numerycznych oblicza bok kwadratu na podstawie podanego pola. Ogólne działanie wygląda w ten sposób: (x+a/x)/2 i to zapętlone aż do skutku. |---------| | | | a |a/x | | |_________| x
Robimy tabeleczkę: pole: 5 x0 1 x1 x:=(x0+pole/x0)/2 x2 x:=(x1+pole/x1)/2 x3 x:=(x2+pole/x2)/2 x4 x:=(x3+pole/x3)/2 ... ... W Excelu jest to do wykonania w ciągu 5 minut, ale w C++ męczę się i męczę i jakoś nic mi konstruktywnego nie wychodzi... Oto kod źródłowy, który i tak nie działa po skompilowaniu... Nie mam pojęcia jak się za to zabrać, proszę o pomoc ;) #include <stdio.h> #include <conio.h> #include <iostream> #include <math.h>
int main( int argc, char * argv[] ) { int pole; int bok; float x; float i; cout << "Podaj pole powierzchni w cm kwadratowych"; cin >> pole; for( x = 1; x = x; x = i ) i =( x + pole / x ); bok = i; cout << bok << endl; getch(); return 0; } Kompilator Devcpp 4 |
|
DejaVu |
» 2008-09-09 20:21:59 Metody numeryczne - wyszukiwanie boku kwadratu. #include <iostream> #include <conio.h> int main() { double pole = 5; double bok = 1; double znaleziono; do { znaleziono = bok; bok =( bok + pole / bok ) / 2.0; } while( bok != znaleziono ); std::cout << "Bok = " << bok << std::endl; getch(); return( 0 ); }
|
|
lynx |
» 2008-09-09 21:08:59 Eee... Pan Piotr mnie upszedził ;P Ale ze względu, że w temacie pisze o bokach prostokąta, nie koniecznie kwadratu zrobiłem też programik, jednak trochę inny niż twój, bo z twojego przez dobre 45 min nic nie mogłem zrobić ;P Zabardzo nie rozumiałem tego całego dzielenia itd. ale przy najmniej udało mi się go poprawnie skompilować. ;) A oto mój przykład do boków prostokąta, działa prawidłowo tylko, że nie którzy nauczyciele mogę się jednak go czepić ;P Kod: #include <stdio.h> #include <conio.h> #include <iostream> #include <math.h> using namespace::std;
int main( int argc, char * argv[] ) { float pole; cout << "Podaj pole powierzchni w cm kwadratowych "; cin >> pole; cout << "\nBoki prostokata przykladowo rownaja sie:\nBok 1: 1 cm" << "\nBok 2: " << pole << " cm"; getch(); return 0; } |
|
amphiprion Temat założony przez niniejszego użytkownika |
» 2008-09-09 21:31:17 Ymm, wyraziłemsię neizbyt precyzyjnie xD Te dane to były dane przykładowe. Chodzi o to, że można wpisać pole jakie się chce i wtedy program obliczy długość boku. Tak samo z x0 jest różnie w zależności od zbioru, do którego należy liczba opisująca pole. Jeśli np pole będzie wynosić 1,23 to x0=0,01. I właśnie w tym problem, jak zdefiniować te x0...
EDIT
To właśnie ma być kwadrat xD Pisałem prostokąt, bo na samym początku psor wyjaśniał na prostokątach, żeby było łatwiej... Ale w efekcie końcowym to ma być program, który wyliczy bok kwadratu na podstawie pola... |
|
DejaVu |
» 2008-09-09 21:36:53 (...)za pomocą metod numerycznych oblicza bok kwadratu na podstawie podanego pola. |
Dostałeś rozwiązanie. Jeśli nie potrafisz dopsiać jednej linijki do programu, aby wprowadzać dowolne pole do zmiennej to nie mamy o czym rozmawiać. |
|
amphiprion Temat założony przez niniejszego użytkownika |
» 2008-09-09 21:44:51 Właśnie to nie takie proste. Tą linijkę już zdążyłem dopisać. #include <stdio.h> #include <conio.h> #include <iostream> #include <math.h>
int main( int argc, char * argv[] ) { double pole; double bok = 1; double znaleziono; cout << "Podaj pole kwadratu w cm lwadratowych: "; cin >> pole; do { znaleziono = bok; bok =( bok + pole / bok ) / 2.0; } while( bok != znaleziono ); std::cout << "Bok = " << bok << std::endl; getch(); return( 0 ); } Działa bez zarzutu, za co już dziękuję, ale jednak działa tylko na liczbach całkowitych. A jak wprowadzam powiedzmy 1,56 nawet po zmianie zainicjowanych zmiennych na typ zmiennoprzecinkowy float, to niestety program fiksuje... Bo problem jest w zmiennej "bok" która nie może cały czas być "1". Się musi zmieniać w zależności od typu wprowadzonej zmiennej oraz od ilości miejsc po przecinku. A niestety to już jest dla mnie zbyt skomplikowane :/ |
|
lynx |
Kropka, a nie przecinek » 2008-09-11 19:03:30 Ehgeem... Program działa prawidłowo tylko musisz zamiast przeciwnka dać kropkę. |
|
« 1 » |