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, а если и спросит — скажи, что нужна для корректного завершения программы.
// ---------------------------------------------------------------------------------
ЗЫ: Хочу добавить, что не призываю тебя саботировать занятия. Для себя обязательно выполняй все лабы. А преподы обойдутся.
|
|
|