C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Помогите с выполнением данной задачки, Нужна помощь в решении задачи в С++
Niniobueno
  Отправлено: 18.11.2005, 01:04


Не зарегистрирован







Помогите разобраться с этой задачкой,в универе её задали уже после 2 лекции(сдаётся учитель думает что все рождаются прирождёнными программистами)....я в С++ вообще ничего не понимаю,более менее научился отличать int от соut.Cкачал книгу Дейтела Х. и Дейтела П. "Как программировать на С++",но работу уже нужно сдавать,а докопаться до сути возьмёт время.

Question 1.
Newton's method for square roots is based on the fact that if y is an approximation to the square root of x, then a better approximation is given by the value
Code:
(y + x / y) / 2
y starts with a "reasonable" guess. In fact, you can always start with x/2 or some other value, say 1.
With x and a guess value y, a new guess value is computed with the above formula. This process continues until the new guess value and the current guess value are very close. In this case, either one can be considered as an approximation of the square root of x.
Write a program that reads in a double value, and computes the square root until the absolute difference of two adjacent guess values is less than 0.00001.
You may not use any functions
Question 2.
Newton's method for cube roots is based on the fact that if y is an approximation to the cube root of x, then a better approximation is given by the value
Code:
(x/(y*y)+2*y)/3

Write a program that reads in a double value, and computes the cube root until the absolute difference of two adjacent guess values is less than 0.00001.
You may not use any functions

Do not forget to use appropriate prompting and checks

The attached picture shows one possible run of one possible program fulfilling the requirements.



Присоединить изображение

Присоединить изображение

Grigoriy
Отправлено: 18.11.2005, 01:56


Мастер участка

Группа: Участник
Сообщений: 381



Приведенный мною код не содержит "защиты от дурака" !

Ответ на первый вопрос.

CODE

//Используется два строковых редактора и одна кнопка.
//---------------------------------------------------------------------------

#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
double x,y,y1,p;
p=0.00001;
x=StrToFloat(Edit1->Text);
y1=0;
y=x/2;
while (fabs(y-y1)>p)
{
y1=y;
y=(y+x/y)/2;
};
Edit2->Text=FloatToStr(y);
}
//---------------------------------------------------------------------------


Ответ на второй вопрос.

CODE

//Используется два строковых редактора и одна кнопка.
//---------------------------------------------------------------------------

#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
double x,y,y1,p;
p=0.00001;
x=StrToFloat(Edit1->Text);
y1=0;
y=x/3;
while (fabs(y-y1)>p)
{
y1=y;
y=(x/(y*y)+2*y)/3;
};
Edit2->Text=FloatToStr(y);
}
//---------------------------------------------------------------------------



Отредактировано Grigoriy — 18/11/2005, 01:59
Niniobueno
Отправлено: 18.11.2005, 02:09


Не зарегистрирован







Большое спасибо:)
Мы пользуемся программкой Bloodshed Dev C++ 4.9.9.2.....как это всё под неё подогнать можно???
Grigoriy
Отправлено: 18.11.2005, 04:18


Мастер участка

Группа: Участник
Сообщений: 381



Вот держи ещё один вариант.
Используется три строковых редактора, один редактор Memo и одна кнопка.
Вывод в Memo1 похож на тот вывод, что на рисунке
https://rxlib.ru/forums/uploads/post...-1132265078.gif

CODE

//---------------------------------------------------------------------------

#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "Unit1koren.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
double x,y,y1,p;
int c;
c=0;
Memo1->Lines->Clear();
p=0.00001;
x=StrToFloat(Edit1->Text);
//Вычисление квадратного корня
y1=0;
y=x/2;
Memo1->Lines->Add("n:"+FloatToStr(x));
Memo1->Lines->Add("let's dance the square? dance");
while (fabs(y-y1)>p)
{
y1=y;
y=(y+x/y)/2;
Memo1->Lines->Add(IntToStr©+":"+FloatToStr(y));
c++;
};
Edit2->Text=FloatToStr(y);
//Вычисление кубического корня
c=0;
y1=0;
y=x/3;
Memo1->Lines->Add("let's dance the cube? dance");
while (fabs(y-y1)>p)
{
y1=y;
y=(x/(y*y)+2*y)/3;
Memo1->Lines->Add(IntToStr©+":"+FloatToStr(y));
c++;
};
Edit3->Text=FloatToStr(y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->ScrollBars=ssBoth;
}
//---------------------------------------------------------------------------

Подпрограмма вычисления корней — подпрограмма обработки событи нажатия на кнопку
void __fastcall TForm1::Button1Click(TObject *Sender)

И смотри рисунок

Отредактировано Grigoriy — 18/11/2005, 04:21

Присоединить изображение

Присоединить изображение

AVC
Отправлено: 18.11.2005, 08:49


Ветеран

Группа: Модератор
Сообщений: 1583



А кто вспомнил о
QUOTE

You may not use any functions
Do not forget ... checks
exp
Отправлено: 19.11.2005, 00:32


Мастер участка

Группа: Участник
Сообщений: 304



Слушай совет, Niniobueno. В панику впадать по поводу преподов не стоит. Большинство из них, если копнуть, много чего не знают.
Допустим, ты не знаешь, как делать программу, а сдать ее надо неменленно иначе — долг. Если ты знаешь, что должно получиться на выходе проги ( в нашем случае это квадратный и кубический корни от входа), то можно обмануть преподавателя следующим нехитрым способом:
CODE

// в начале пишешь
#define CHEAT_MODE

// Потом пишешь заляпушную процедуру, имитирующую работу
// указанного алгоритма. при этом желательно, чтоб хоть какие-то
// общие стороны с нормальным алгоритмом были
double MySQRTFunction(double x)
{
// bla bla bla
}

double Result = MySQRTFunction(x); // Запоминаем результат работы
// нашей липовой функции
// А вот когда приходит время выводить результат,
// пишешь так:

#ifndef CHEAT_MODE
//
//
//
// В этой секции кода ты выводишь результат Result
// И именно сюда будешь показывать преподователю, когда будешь
// говорить, где именно выводится результат
#else
// А здесь выводишь результаты работы встроенной функции sqrt(x)
// Эту часть кода преподаватель заметить не должен, потому что  
// выполняться будет именно она.
// Перед #else лучше побольше строк напихать, чтоб не так палевно
// было.
// Да и сам вывод лучше запихнуть в функцию с именем а-ля
// SystemRunTimeInfo :)
#endif

Ни один препод не сознается, что он не знает, что такое SystemRunTimeInfo, а если и спросит — скажи, что нужна для корректного завершения программы.
// ---------------------------------------------------------------------------------
ЗЫ: Хочу добавить, что не призываю тебя саботировать занятия. Для себя обязательно выполняй все лабы. А преподы обойдутся. wink.gif

Вернуться в Вопросы программирования в C++Builder