Обработка одномерных массивов
Формирование последовательностей и разработка алгоритма в соответствии с принципом процедурной абстракции. Выбор основных функций программы. Описание функции malloc. Анализ алгоритма создания последовательностей. Составление программы на языке Си.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 12.05.2015 |
Размер файла | 93,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Государственное образовательное учреждение высшего профессионального образования
«Санкт-петербургский университет телекоммуникаций им. Профессора М.А. Бонч-Бруевича»
Лабораторная работа
на тему: «Обработка одномерных массивов»
по дисциплине: Программирование
Выполнил: Щербак Алексей Сергеевич
Преподаватель: Козин Станислав Васильевич
Санкт-Петербург - 2015
1. Постановка задачи
Необходимо выполнить заданную обработку одномерных массивов. Все основные действия (ввод исходных массивов, формирование новых) необходимо выполнить с помощью функции. Даны три числовые последовательности a, b и c, состоящие из n элементов . Сформировать две новые последовательности x и y в соответствии со следующим правилом
где i = 0, 1, n-1; d - произвольное число
При работе с массивами необходимо пользоваться динамической памятью.
2. Разработка алгоритма
При выполнении этой работы, прежде всего, стоит придерживаться принципа процедурной абстракции. Каждая функция должна выполнять свою задачу и при необходимости может быть легко перенесена в другую программу, где требуется подобная функция. При этом функции необходимо создавать таким образом, что при необходимости изменить или дополнить программу, программисту не пришлось бы вносить в код глобальные изменения. Основная задача при написании кода - максимально упростить функцию main таким образом, что программисту, не принимавшему участие в создании кода, не составит труда быстро разобраться в том, что делает эта программа. main должна содержать лишь выполняющих действия с массивами функций.
Исходя из вышесказанного, будет уместно оформить данную работу в виде двух модулей. Первый модуль содержит лишь функцию main и называется main.c .Второй же содержит все функции, выполняющие действия с массивами. Он будет носить название arrays.c .
При решении целесообразно использовать подпрограммы, выполняющие следующие операции:
· Ввод исходных данных
· функция поиска максимума (см. условие)
· заполнение массивов новыми последовательностями
· вывод результатов
Решено было использовать для каждой последовательности отдельный массив. На мой взгляд, этот способ проще, чем экономный способ (только 4 массива), так как он более простой и обеспечивает более быструю работу. Хотя, при использовании такого маленького размера данных, вряд ли удастся это заметить.
Входные данные в программе состоят из числовых последовательностей и величины n - количества элементов входных последовательностей. Количество элементов вводится в программе в функции main , а входные последовательности вводятся в подпрограмме, реализованной в модуле arrays.c .
Таблица идентификаторов.
Обозначение в задаче |
Идентификатор |
Назначение |
|
n |
n |
Количество элементов последовательностей |
|
a |
a |
Входная последовательность |
|
b |
b |
Входная последовательность |
|
с |
с |
Входная последовательность |
|
- |
i |
Счетчик цикла for |
|
x |
x |
Выходная последовательность |
|
y |
y |
Выходная последовательность |
|
d |
d |
Некое произвольное число. |
Здесь перечислены переменные, которые, в основном, используются в качестве фактических параметров в функциях программы.
3. Функции программы
main |
Основная функция программы |
|
enter_array |
Ввод входящей последовательности |
|
maximum |
Возвращает максимум из передаваемых трех значений (см. условие) |
|
filling_array |
Формирует новые последовательности |
|
result |
Выводит результат на экран |
Здесь перечисленные только пользовательские функции.
4. Отдельно стоит сказать о функции malloc
Запись (double*) см. строка 16 преобразует неопределенный указатель в тип double. Функция sizeof определяет количество байт для переменной одного из стандартных типов. Для функции malloc возвращаемое значение является неопределенным указателем на первый байт зарезервированной области статической памяти и равен NULL при отсутствии возможности выделить память требуемого размера. Для получения указателя на конкретный тип данных, необходимо применить к возвращаемому значению операцию явного преобразования типа. Например: int malloc* (sizeof)
Таки образом, для создания динамического массива получаем
a = (double*)malloc(n* sizeof (double));
5. Контрольный расчет
Для того чтобы понять, правильно ли работает программа вовсе не нужно производить какие либо расчеты при помощи математических пакетов типа wx maxima. Достаточно лишь подобрать правильный тестовый набор входных данных, такой, что прокрутить в уме вычисления, которые производит программа, не составит труда.
Для этого возьмем следующие данные:
a |
{3, 3, 3, 3, 3} |
|
b |
{3, 3, 3, 3, 3} |
|
c |
{3, 3, 3, 3, 3} |
|
d |
4 |
|
n |
5 |
При вводе таких данных программа выдает следующий результат:
Проанализировав алгоритм создания последовательностей x и y , нетрудно приди к выводу, что программа работает правильно. По формуле (см. постановка задачи) создания последовательностей x и y , сначала необходимо найти максимум из трех чисел, а затем (и для x , и для y) разделить его на 2.
Результаты ручных вычислений
x |
y |
a |
b |
c |
|
2 |
2 |
3 |
3 |
3 |
|
2 |
2 |
3 |
3 |
3 |
|
2 |
2 |
3 |
3 |
3 |
|
2 |
2 |
3 |
3 |
3 |
|
2 |
2 |
3 |
3 |
3 |
6. Программа на языке Си
main.c
#include "arrays.h"
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
int main ()
{
double d,*a, *b, *c, *x, *y ;
int n;
setlocale (LC_ALL, "Rus");
printf("Введите n: ");
scanf_s("%d",&n);
a =(double*) malloc(n* sizeof (double));
b =(double*) malloc(n* sizeof (double));
c =(double*) malloc(n* sizeof (double));
x =(double*) malloc(n* sizeof (double));
y =(double*) malloc(n* sizeof (double));
if (a == NULL || b == NULL || c == NULL || x == NULL || y == NULL)
{
printf("Ошибка выделения памяти");
exit(0);
}
enter_array(n, 'a', a );
enter_array(n, 'b', b );
enter_array(n, 'c', c );
printf("Введите число d = ");
scanf_s("%lf", &d);
filling_array ( n, d, x, a, b );
filling_array ( n, d, y, b, c );
result ( n, x, y, a, b, c);
free(a);
free(b);
free(c);
free(x);
free(y);
*a = 0;
*b = 0;
*c = 0;
*x = 0;
*y = 0;
return 0;
}
arrays.c
#include <stdio.h>
void enter_array(int n, char bukva, double arr[])
{
int i;
for(i = 0; i < n; i++)
{
printf("%c_[%d] = ",bukva,i);
scanf_s("%lf",&arr[i]);
}
}
double maximum(double arr_1[], double arr_2[], int n, double d)
{
double max = arr_1[0];
int i;
for(i = 0; i < n; i++)
{
if (max < arr_2[i])
max = arr_2[i];
if (max < d)
max = d;
}
return max;
}
void filling_array (int n, double d, double arr[],double arr_1[], double arr_2[] )
{
int i;
for (i = 0; i < n; i++)
{
arr[i] = maximum( &arr_1[i], &arr_2[i], n , d)/2;
}
}
void result (int n, double arr[], double arr_1[], double arr_2[], double arr_3[], double arr_4[])
{
int i;
printf("%6s%8.3s%8.3s%8.3s%8.3s%8.3s\n", "nomber", "x", "y", "a", "b", "c");
printf("_____________________________________________\n");
for (i = 0; i < n; i++)
printf("%6d%8.3lf%8.3lf%8.3lf%8.3lf%8.3lf\n", i, arr[i],arr_1[i], arr_2[i], arr_3[i], arr_4[i] );
}
arrays.h
#ifndef _ARRAYS
#define _ARRAYS
void enter_array(int n, char bukva, double arr[] );
void maximum (double arr_1[], double arr_2[], int n, double d);
void output(int n, double x[], double y[],double a[], double b[], double c[]);
void filling_array (int n, double d,double arr[],double arr_1[], double arr_2[] );
void result (int n, double arr[], double arr_1[], double arr_2[], double arr_3[], double arr_4[]);
#endif
одномерный массив последовательность malloc
Вывод
Результаты контрольных расчетов, выполненных вручную, достаточно совпадают с результатами контрольных расчетов, выполненных на ЭВМ, следовательно, программа составлена правильно.
Размещено на Allbest.ru
...Подобные документы
Разработка программы обработки числовых последовательностей с кодом на языке Pascal. Функции ввода пользователем с клавиатуры последовательности целых чисел. Алгоритмы разработанных процедур и функций. Инструкция пользователя, листинг программы.
курсовая работа [677,7 K], добавлен 13.07.2010Символьные типы данных, работа со строками, составление блок-схемы алгоритма и программы для работы с массивами. Организация программы с использованием процедур и функций. Процедуры и функции, использующиеся при обработке файлов; компонентные файлы.
контрольная работа [52,9 K], добавлен 03.10.2010Использование класса статических массивов структур и базы данных "ODER" при создании программы на языке С++. Основные формы выдачи результатов. Технические и программные средства. Тесты для проверки работоспособности алгоритма создания программы.
курсовая работа [1,1 M], добавлен 17.03.2015Анализ функции и разработка алгоритма по ее вычислению. Программирование отдельных блоков и структур алгоритма. Структура Паскаль-программы. Раздел описаний, подпрограммы, тело программы. Полная Паскаль-программа в соответствии с разработанным алгоритмом.
курсовая работа [241,8 K], добавлен 30.01.2016Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.
курсовая работа [1,4 M], добавлен 16.03.2012Оценка погрешности и точности в математике. Составление программы и алгоритма для численного дифференцирования с заданной допустимой погрешностью на алгоритмическом языке Turbo Pascal 7.0. Составление алгоритма и программы аппроксимации функции.
курсовая работа [810,6 K], добавлен 24.03.2012Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.
курсовая работа [823,0 K], добавлен 18.12.2011Постановка задачи и ее математическая модель. Блок-схема алгоритма обработки массивов координат точек. Тестирование алгоритма сортировки. Используемые глобальные и локальные переменные. Листинг программы на языке Си. Анализ результатов. Пример работы.
курсовая работа [1,8 M], добавлен 08.11.2012Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.
курсовая работа [1,4 M], добавлен 04.06.2013Анализ заданной сложной функции и разработка структурной схемы алгоритма по её вычислению. Программирование отдельных блоков и структур алгоритма решаемой задачи на языке Паскаль. Полная программа в соответствии с алгоритмом. Результаты расчётов на ПК.
курсовая работа [59,2 K], добавлен 09.04.2012Разработка алгоритма синтеза пленочного резистора по заданным параметрам исходного резистора, программы реализации данного алгоритма на языке С++. Отладка и тестирование программы, составление документации и инструкции пользователя данной программой.
курсовая работа [1,7 M], добавлен 08.06.2009Разработка линейной программы на языке С++. Разработка программ с разветвленной структурой. Составление по заданному варианту схемы алгоритма и программы вычисления тригонометрической функции с абсолютной погрешностью с использованием разложения в ряд.
лабораторная работа [1,2 M], добавлен 12.01.2011Описание алгоритма решения задачи графическим способом. Вывод элементов массива. Описание блоков укрупненной схемы алгоритма на языке Pascal. Листинг программы, а также ее тестирование. Результат выполнения c помощью ввода различных входных данных.
контрольная работа [150,4 K], добавлен 03.05.2014Разработка алгоритма и программы, обеспечивающей вычисление максимального значения функции на заданном отрезке, первой производной заданной функции. Методика расчёта, алгоритм решения задачи, описание программы. Результаты расчётов и графики функций.
курсовая работа [576,6 K], добавлен 17.05.2011Понятие массива и правила описания массивов в программах на языке С. Рассмотрение основных алгоритмов обработки одномерных массивов. Примеры программ на языке С для всех рассмотренных алгоритмов. Примеры решения задач по обработке одномерных массивов.
учебное пособие [1,1 M], добавлен 22.02.2011Изучение категории типов данных, видов выражений и операций, работа на языке Си. Составление программы вычисления значения функции у(х) при произвольном значении х. Блок-схема алгоритма. Описание текста программы и рассмотрение контрольного примера.
лабораторная работа [124,7 K], добавлен 09.01.2012Описание информационной структуры, используемой для организации списка. Контрольные примеры обработки и сортировки. Краткое описание алгоритма. Локальные переменные функции. Иерархическая структура программы, а также код программы на языке С/С++.
курсовая работа [91,4 K], добавлен 16.07.2013Решения задачи графическим и программным способами. Описание алгоритма решения графическим способом, укрупненная схема алгоритма. Ввод элементов двумерного массива, вывод преобразованного массива, разработка программы на языке pascal, листинг программы.
курсовая работа [115,5 K], добавлен 22.05.2010Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Пример вычисления степенного ряда с помощью схемы Горнера. Описание переменных программы, листинг, процедуры и функции.
курсовая работа [67,6 K], добавлен 20.11.2012Особенности разработки программы и выбор методов решения задачи. Составление алгоритма, распределение регистров программы и формирование файлов. Описание процедуры очистки памяти, сложения, вычитания, умножения. Тестирование и листинг программы.
лабораторная работа [51,2 K], добавлен 14.05.2011