Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Metody numeryczne - boki prostokąta

Ostatnio zmodyfikowano 2008-09-11 19:03
Autor Wiadomość
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 ;)

C/C++
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <math.h>

int main( int argc, char * argv[] )
{
    int pole; //zmienna opisująca pole prostokątu
    int bok; // zmienna opisująca jeden z boków prostokątu
    float x; // zmienna pomocnicza do obliczenia boków
    float i;
   
    cout << "Podaj pole powierzchni w cm kwadratowych";
    cin >> pole;
   
    for( x = 1; x = x; x = i ) i =( x + pole / x ); //działanie na średnią arytmetyczną
   
    bok = i;
    cout << bok << endl;
   
    getch();
    return 0;
}

Kompilator Devcpp 4
P-1524
DejaVu
» 2008-09-09 20:21:59
Metody numeryczne - wyszukiwanie boku kwadratu.

C/C++
#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 );
}
P-1525
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:

C/C++
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <math.h>
using namespace::std;

int main( int argc, char * argv[] )
{
    float pole; //zmienna opisująca pole prostokątu
   
    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;
}
P-1528
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...
P-1530
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ć.
P-1532
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ć.

C/C++
#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 :/
P-1533
lynx
Kropka, a nie przecinek
» 2008-09-11 19:03:30
Ehgeem... Program działa prawidłowo tylko musisz zamiast przeciwnka dać kropkę.
P-1545
« 1 »
  Strona 1 z 1