Алгоритм решения задачи: После ввода данных запускается цикл-счетчик в ходе которого по формуле представленной в условии задачи, находится цепная дробь до n-ого элемнта

ЛАБОРАТОРНАЯ РАБОТА №3

по курсу Информатика

Ряды, цепные дроби.

 

 

Группа: АБ 121

Студент: Дик М.Е.

Преподаватель: Малявко А.А.

 

Новосибирск 2011


1. Цель работы:

Научиться решать задачи связанные с рядами и цепными дробями

2. Задание 3:Определить корень третьей степени от Z по итерационной формуле, пока |Wn+1 - Wn| < e

Wn+1 = Wn +(1/3)(Z/ Wn2- Wn)

начальное значение

Z/3 , если Z >= 0 W0= 3 Z если Z < 0

Использовать функцию F(w) = w + (1/3)(Z/ w2- w)

Алгоритм решения задачи: Вводится значение переменной Z, затем в зависимости от ее знака, ей присваивается значение, после чего запускается цикл с предусловием, в ходе которого вычисляется корень третьей степени из введенного с клавиатуры числа.

4. Текст программы решения задачи:

#include "stdafx.h"

//#include <stdio.h>

#include <conio.h>

#include <iostream>

 

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL,"russian");

//Объявление переменных

float z = 0;

float wn1 = 0;

float wn = 0;

float e = 0;

float x = 0;

 

//Ввод данных

printf("Введите Z: ");

scanf("%f",&z);

printf("Введите точность(разделение целой и дробной части через запятую): ");

scanf("%f",&e);

 

//Определение корня третьей степени

wn = 0;

wn1 = 0;

 

if (z < 0)

wn = 3 * z;

else

wn = z / 3;

x = wn;

 

while (x > e)

{

wn1 = wn + (z / (wn * wn) - wn) / 3;

x = wn1 > wn? wn1 - wn : wn - wn1;

wn = wn1;

//printf("%f %f %f\n", e, x, Wn);

}

 

printf("%9.2f",wn1);

 

getchar();

getchar();

return 0;

}

5. Результаты работы программ:

2. Задание:Вычислить квадратный корень из произвольного вещественного числа А>0 по итерационной формуле, пока |Yn+1 - Yn| < e

Yn+1 = 0.5(Yn +A/Yn) и полагая Y0=A

3. Алгоритм решения задачи:

Вводятся данные с клавиатуры, затем запускается цикл с предусловием в ходе которого вычисляется квадратный корень, по формуле приведенной в условии задачи.

4. Текст программы решения задачи:

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <iostream>

 

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL,"russian");

//Объявление переменных

float A=0;

float Yn1=0;

float Yn=0;

float e=0;

float x=0;

 

//Ввод значений переменных

printf("Введите число А: ");

scanf("%f", &A);

printf("Введите точность: ");

scanf("%f", &e);

 

//Вычисление корня

Yn = A;

x = A;

while (x > e)

{

Yn1 = (Yn + A/Yn) / 2;

x = Yn1 > Yn? Yn1 - Yn: Yn - Yn1;

Yn = Yn1;

}

printf("%f",Yn);

getchar();

getchar();

return 0;

}

5. Результаты работы программ:

2. Задание 5:Получение N-го числа Фибоначи, т.е. числа из последовательности

0 1 1 2 3 5 8 13 21 34

ci= ci-1 + ci-2 (c1 = 0 c2 = 1 ) n=10 c=34

Алгоритм решения задачи: После ввода данных, запускается цикл-счетчик в котором находится n-ый член последовательности, путем воспроизведения этой последовательности до n-ого члена.

4. Текст программы решения задачи:

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <iostream>

 

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL,"russian");

//Объявление переменных

int c=0;

int cp=1; //сi-1 из формулы

int cpp=0; //ci-2 из формулы

int i=0;

int n=0;

 

//Ввод данных

printf("Введите номер элемента последовательности: ");

scanf("%d",&n);

 

//Нахождение n-ого члена последовательности

 

for (i=3;i<=n;i++)

{

c=cpp+cp;

cpp=cp;

cp=c;

}

printf("%d",c);

getchar();

getchar();

return 0;

}

5. Результаты работы программ:

2. Задание 7:

Нахождение наибольшего общего делителя двух чисел N и M по рекуррентному соотношению

(N=23345 M=9135 => 1015 N=238 M=347 => 34)

Nk = Nk-2 - INT(Nk-2 / Nk-1) N k-1 k=2,3 ...

N0 = max(|N|, |M|) N1 = min(|N|, |M|)

Если Nk = 0 => НОД = Nk-1

Алгоритм решения задачи: После ввода данных, переменным N и M присваивается модуль их же значения, затем запускается цикл с предусловием, в ходе которого по формуле представленной в условии задачи, находится наибольший общий делитель.

4. Текст программы решения задачи:

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <iostream>

 

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL,"russian");

//Объявление переменных

int N = 0;

int M = 0;

int Npp = 0;// Nk-2 из формулы

int Np = 0; //Nk-1 из формулы

int i = 0;

 

//Ввод данных

printf("Введите N и M: ");

scanf("%d%d",&N,&M);

 

// модуль числа

N = N > 0? N : - N;

M = M > 0? M : - M;

 

// нахождение начальных значений

Npp = N > M? N : M;

Np = N < M? N : M;

 

// нахождение НОД

while ( N != 0)

{

N = Npp - (Npp / Np) * Np;

Npp = Np;

Np = N;

}

 

//вывод

printf("%d",Npp);

getchar();

getchar();

return 0;

}

5. Результаты работы программ:

2. Задание:Преобразование десятичного числа X в цепную или непрерывную дробь, производится выделением целой части X, а затем целых частей.

Xi = 1/(Xi-1 - INT(Xi-1 ))

Алгоритм решения задачи: После ввода данных запускается цикл-счетчик в ходе которого по формуле представленной в условии задачи, находится цепная дробь до n-ого элемнта.

4. Текст программы решения задачи:

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <iostream>

 

 

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_ALL,"russian");

 

//Объявление переменных

int integralpart = 0;

float xi = 0; //Xi из формулы

float xi1 = 0; //Xi-1 из формулы

int i = 0;

int n = 0;

 

//Ввод данных

printf("Введите десятичное число: ");

scanf("%f", &xi1);

printf("Введите количество элементов дроби: ");

scanf("%d", &n);

 

//Нахождение непрерывной дроби

xi = xi1;

for (i=0; i<=n; i++)

{

if (xi1 != integralpart)

{

integralpart = xi/1;

printf("%d, ", integralpart);

xi = 1 / (xi1 - integralpart);

xi1 = xi;

}

}

 

getchar();

getchar();

return 0;

}

5. Результаты работы программ:

6. Выводы и заключение: В ходе проделанной работы я научился решать задачи с цепными дробями и рядами.