Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Касаткин С., Раткевич И., Травова Н. - Лаборато...doc
Скачиваний:
1
Добавлен:
22.11.2019
Размер:
1.01 Mб
Скачать

Лабораторная работа № 6 Тема: “Программы, использующие массивы ”.

  1. Программа заполняет массив a(50) случайными целыми числами из диапазона [-20, 30] и упорядочивает его по возрастанию. Исходный и упорядоченный массивы выводятся на экран дисплея.

Программа иллюстрирует работу с массивом фиксированного размера, заполненным случайными числами.

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include<stdlib.h>

#include<windows.h>

using namespace std; // Используем стандартное пространство имён

/* Функция, выполняющая перестановку значений двух переменных (обратите внимание на то, что аргументы должны быть объявлены как ссылки): */

void swap(int& a, int& b)

{

int c;

c=a; a=b; b=c;

}

// Подпрограмма сортировки методом «пузырька»

void sort(int* a, int n)

{

for ( int i = 1; i < n; i++ ) // отсчитываем проходы по массиву

for ( int j = 0; j < n-i; j++ ) // проходим по массиву

{

if ( a[j] > a[j+1] ) // сравниваем два соседних элемента

swap(a[j], a[j+1]); // переставляем их

}

}

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

int n=50;

int *a=new int[n]; // объявляем массив из 50 элементов

cout<<"Исходный массив:\n";

// заполняем массив случайными числами и выводим на экран

int RANGE_MIN = -20; // Минимальный элемент

int RANGE_MAX = 51; // Максимальный элемент

//Пример взят из справки ms-help: //MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vccrt/html/75d9df25-7aaf-4a88-b940-2775559634e8.htm

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

{

a[i] = (int)(((double) rand() / (double) RAND_MAX) * RANGE_MAX + RANGE_MIN); // случайные числа из диапазона [-20, 30]

cout << setw(4) << a[i]; /* выводим на экран элемент массива (ширина поля вывода – 4 */

}

cout <<endl;

// Вызываем функцию сортировки и передаем ей указатель на массив и размер массива:

sort( a, n);

printf("\nМассив, отсортированный по возрастанию:\r\n");

// для вывода массива на экран требуется цикл:

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

{

printf("%4d", a[i]); // выводим элемент массива на экран

}

printf("\r\n"); // перевод курсора в начало следующей строки

_getch();

return 0;

}

  1. Программа, которая по заданным корням многочлена степени n восста­нав­ливает все коэффициенты многочлена.

Программа иллюстрирует работу с массивами изменяющегося размера.

Для вычисления коэффициентов можно воспользоваться соотношением:

В результате при вводе первого корня мы должны получить коэффициенты 1 и – x, например: при x1 = 2 мы получаем многочлен (два коэффициента).

При вводе второго и последующих корней коэффициенты вычисляются следую­щим образом:

a0 a1 a2 … an-1

+ -a0xn -a1xn … -an-2xn – an-1xn

Например: при вводе двух корней 2 и –3 получаем:

(x-2)(x+3) = x2-2x+3x-6 =1x2 + 1x –6

1 -2

+ -1(-3) –(-2)(-3)

---------------------------

1 1 -6

Проходить по массиву коэффициентов нужно обязательно с конца, поскольку коэф­фициенты изменяются в процессе вычислений, а при вычислении нового значения ко­эф­фициента используется коэффициент, стоящий слева от него.

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include<ctype.h>

#include<stdlib.h>

#include<windows.h>

using namespace std;

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl;

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

do

{

int n; // количество корней

do

{

cout << "Задайте количество корней > 0 --> ";

cin >> n;

} while (n < 1);

double* x = new double [n]; //корни

double* a = new double [n+1]; //коэффициенты многочлена

a[0] = 1; // первый коэффициент равен единице

cout << "Задайте корни:\n";

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

{

cout<< i+1 <<"-й корень --> ";

cin >> x[i];

a[i+1] = -a[i] * x[i];

//Добавили последний коэффициент в массив

// вычисляем остальные коэффициенты:

for (int j = i; j >= 1; j--)

a[j] += -a[j-1] * x[i];

}

// вывод:

cout << "Заданы корни: ";

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

cout << x[i]<<" ";

cout << endl;

cout << "Коэффициенты многочлена: ";

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

cout << a[i]<<" ";

cout << endl;

delete []x;

delete []a;

cout<<"Для выхода нажмите Esc\n";

}while(_getch()!=27);

return 0;

}

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.