Пример выполнения задания





Сохранение результатов вычислений в массиве

Массиваминазывают структурные переменные, представляющие набор однотипных элементов – элементов массива. Доступ к элементам массива, называемым индексными переменными, осуществляется по имени массива и набору индексов, однозначно определяющих положение элемента в массиве. Если элементы массива сами не являются массивами, то такой массив называют одномерными для обращения к элементам массива используется только один индекс, иначе массив называют многомерным (двумерным, трехмерным и так далее). В этом разделе ограничимся рассмотрением одномерных массивов.

В качестве индексов могут выступать выражения (в частности, константы и переменные) целого типа, которые записываются после имени массива в квадратных скобках через запятую. Минимальным значением индекса всегда является 0, соответственно максимальный индекс должен быть на единицу меньше размера массива.

Объявлениямассивов отличаются от объявлений простых переменных только тем, что после имен массивов в парах квадратных скобок записываются их размеры, а имена массивов являются указателями на область памяти, выделяемой для хранения значений его элементов. Например,

float X[3], Z[3];

имена X и Y массивов будут указателями на области памяти, выделенные для хранения значений индексных переменных X[0], X[1], X[2] и Z[0], Z[1], Z[2].

Массивам, как и простым переменным, можно задавать начальные значения (что удобно при отладке программ), записав их списком в фигурных скобках через запятую, причем длина списка должна быть меньше или равна размеру массива. Например, в объявлении

 

double Y[10]={ 1.2, 4.2, -5.1, 4.4, -1.5};

 

первые пять из десяти элементов массива будут иметь начальные значения:

Y[0] = 1.2, Y[1] = 4.2, Y[2] = -5.1, Y[3] = 4.4, Y[4] = -1.5.

 

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

Размеры массива нельзя изменить во время работы программы, поэтому для обеспечения массовости алгоритма программы необходимо объявлять массивы с максимально возможными размерами, исходя из условий применения программы, обычно формулируемыми в задании на её разработку.

Свойство «массовость» алгоритма предполагает его применимость к различным, заранее оговоренным, наборам данных, в частности, задаваемых при вводе. В рассмотренном выше примере объявления массива Y, если он будет представлять исходные данные для какого-либо алгоритма, свойство «массовость» может обозначать, что могут обрабатываться любые наборы от одного числа до девяти чисел с любыми значениями, допустимыми для типа double.

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

Х(20) – будет обозначать, что для хранения данных должен использоваться одномерный массив, в котором подлежат обработке 20 последовательно расположенных элементов.

Х(N), N<=20 – будет обозначать, что для хранения данных должен использоваться одномерный массив, в котором подлежат обработке первые N последовательно расположенных элементов.

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

Пример. Составить программу вычисления и сохранения в массиве Y значений функции y=sin x и в массиве X - соответствующих значений аргумента. Аргумент должен изменяться в градусах с шагом dX от начального значения X0.

 

#include "stdafx.h"

#include "stdio.h"

#include "math.h"

 

 

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

{

double X[10], Y[10], X0, dX, Pi;

int i;

printf("Enter X0 :");

scanf("%lf",&X0);

printf("Enter dX :");

scanf("%lf",&dX);

Pi=atan(1.0)*4.0;

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

{

X[i]=X0;

Y[i]=sin(X0*Pi/180);

X0+=dX;

}

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

printf("%6.2lf %lf\n",X[i],Y[i]);

 

return 0;

}

Пример выполнения задания

Составить программу для подсчёта и сохранения в массиве M(10) количеств значений целочисленного массива X(N), N≤500, попадающих в интервалы с номерами от 1 до 10 шириной h=(Xmax-Xmin+1)/10, где Xmax=50 и Xmin=1 – максимальное и минимальное значения в массиве X соответственно. Массив X заполнить случайными числами с равномерным распределением в диапазоне от Xmin до Xmax, используя стандартную функцию Random. Использовать также процедуру Randomize, чтобы генерировать новый набор случайных чисел при каждом запуске программы. Объявить Xmin, Xmax и h в разделе констант. Полученные результаты использовать для вывода в виде гистограммы:

Вычислить также для помещенных в массив X случайных чисел среднее значение MX и дисперсию DX по формулам: и

#include "stdafx.h"

#include <time.h> //для функции time

#include <stdlib.h>//для функций srand и rand

 

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

{

const unsigned Nmax=500, Xmax=50, Xmin=1, h=5;

unsigned M[10], X[Nmax], t;

unsigned i, j, u, N;//N - количество случайных чисел

float MX, DX;

//Ввод количества случайных чисел

printf("Enter N:");

scanf("%u", &N);

 

//Получение числа секунд, прошедших

t=time( NULL ); //с 1.1.1970 до текущего момента

//задание начального значения

srand(t);//генератора случайных чисел

 

//Получение N случайных чисел в диапазоне

//от Xmin до Xmax и сохранение в массиве X

//(RAND_MAX - максимальное случайное число)

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

X[i]= (double)rand()/(RAND_MAX + 1)

* (Xmax - Xmin+1)+ Xmin;

 

//Накопление в ячейках массива M количеств

//попаданий значений из массива X в интервалы

//[0..4], [5..9], …, [45..49]

for (i=0; i<10; i++) M[i]=0;

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

//Увеличить на 1 значение элемента массива M

M[(X[i]-Xmin)/h]++;//с индексом (X[i]-Xmin)/h

 

//Вывод результатов в виде гистограммы

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

{

printf("%3d - %3d%3d ",i*h+1,(i+1)*h,M[i]);

for (j=0;j<M[i]; j++)

printf("X");

printf("\n");

}

//Вычисление и вывод среднего значения

MX=0;

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

MX=MX+X[i];

MX=(float)MX/N;

printf("\nMX = %lf\n",MX);

//Вычисление и вывод дисперсии

DX=0;

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

DX=DX+(X[i]-MX)*(X[i]-MX);

DX=(float)DX/N;

printf("DX = %lf\n",DX);

 

return 0;

}

 





Читайте также:
Историческое сочинение по периоду истории с 1019-1054 г.: Все эти процессы связаны с деятельностью таких личностей, как...
Решебник для электронной тетради по информатике 9 класс: С помощью этого документа вы сможете узнать, как...
Технические характеристики АП«ОМЕГА»: Дыхательным аппаратом со сжатым воздухом называется изоли­рующий резервуарный аппарат, в котором...
Социальное обеспечение и социальная защита в РФ: Понятие социального обеспечения тесно увязывается с понятием ...

Рекомендуемые страницы:



Вам нужно быстро и легко написать вашу работу? Тогда вам сюда...

Поиск по сайту

©2015-2021 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту:

Мы поможем в написании ваших работ! Мы поможем в написании ваших работ! Мы поможем в написании ваших работ!
Обратная связь
0.075 с.