Лабораторная работа № 2. Программирование с использованием ветвлений

Основы алгоритмизации

Электронное учебное издание

Методические указания по выполнению Лабораторных работ № 2-9

по дисциплине «Информатика»

Москва

(С) 2016 МГТУ им. Н.Э. БАУМАНА

УДК 004.432

Рецензент: доцент кафедры ИУ7 к.т.н. Новик Н.В..,

Т.Н. Ничушкина

Основы алгоритмизации. Методические указания по выполнению лабораторных работ № 2-9 по дисциплине «Информатика» -М.: МГТУ имени Н.Э. Баумана, 2015. 10 с.

Методические указания содержат теоретические сведения об основах алгоритмизации. Рассмотрены основные приемы программирования. Приведены примеры разработки алгоритмов при использовании различных приемов и их реализация на языке С++.

Для студентов МГТУ имени Н.Э. Баумана, обучающихся по программе бакалавриата по направлению «Математика и компьютерные науки»

Рекомендовано Учебно-методической комиссией НУК «Информатика и системы управления» МГТУ им. Н.Э. Баумана

Электронное учебное издание

Ничушкина Татьяна Николаевна

Основы алгоритмизации

Методические указания по выполнению лабораторных работ № 2-9 по дисциплине «Информатика»

© Т.Н. Ничушкина, 2016

© МГТУ имени Н.Э. Баумана, 2016

Московский государственный технический университет

Содержание

Содержание. 3

Введение. 3

Лабораторная работа № 2. 4

Программирование с использованием ветвлений. 4

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

Лабораторная работа № 3. 8

Программирование с использованием циклов. 8

Цель работы: изучение операторов организации циклов, приемов создания программ, обеспечивающих выполнение циклических процессов. 8

Лабораторная работа № 4. 15

Обработка одномерных массивов. 15

Цель работы: изучение приемов обработки одномерных массивов. 15

Лабораторная работа № 5. 20

Обработка матриц. 20

Цель работы: изучение приемов обработки матриц в программах. 20

Лабораторная работа № 6. 24

Обработка строк. 24

Цель работы: изучение приемов обработки текстовой информации. 24

Лабораторная работа № 7. 29

Программирование с использованием подпрограмм.. 29

Цель работы: изучение соглашений о передаче параметров и средств организации передачи управления и данных 29

Лабораторная работа № 8. 34

Программирование с использованием динамической памяти. 34

Цель работы: изучение приемов и средств, обеспечивающих хранение данных на дисках и их обработку. 34

Лабораторная работа № 9. 40

Программирование с использованием файлов. 40

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

Заключение. 46

Список литературы. 46

Введение

Лабораторная работа № 2. Программирование с использованием ветвлений

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

Объем работы:2 часа

Теоретическая часть

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

Для программирования ветвлений, т. е. ситуаций, когда возникает необходимость при выполнении условия реализовывать одни действия, а при нарушении – другие, используют оператор условной передачи управления. Условие записывают в виде выражения, заключенного в круглые скобки. В зависимости от результата этого выражения осуществляется выбор одной из ветвей: если результат выражения «не ноль», то выполняется оператор, следующий за условным выражением, иначе – оператор, следующий за служебным словом else.

Синтаксис оператора ветвления:

if (<Выражение>) <Оператор;> [ else <Оператор;>]

где:

Оператор– любой оператор С++.

Выражение – любое выражение, соответствующее правилам составления выражений С++.

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

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

Составным оператором в С++ называют последовательность операторов, заключенную в операторные скобки ( {……}). Операторы последовательности отделяют друг от друга точкой с запятой. Перед закрывающей скобкой (}) блока, точку с запятой также обязательно ставить. Так как точка с запятой является неотъемлемой частью оператора, то перед else точка с запятой обязательна. Исключением является составной оператор, так как в нем точка с запятой уходит внутрь блока.

В соответствии с синтаксисом оператора ветвления, допускается использовать оператор условной передачи управления с пропущенной (пустой) ветвью else. Такой оператор называется укороченным.

Так как в качестве оператора ветви по синтаксису может быть использован условный оператор, как в полной, так и укороченной форме, то при реализации такой конструкции могут возникнуть неоднозначности. Для этого необходимо использовать правило вложения. Это правило гласит:ветвь else всегда относится к ближайшему if.

Правило вложения продемонстрируем на примере нижеприведенных фрагментов алгоритмов:

Лабораторная работа № 2. Программирование с использованием ветвлений - student2.ru

Рисунок 1 –Варианты алгоритмов неоднозначных ветвлений

Следуя правилу вложения, для реализации варианта а подойдет следующий фрагмент программы на языке С++:

if <Условие1> then

if <Условие2> then <Действие1>

else <Действие 2>

Для реализации варианта б следует использовать составной оператор {…}:

if <Условие1>

{

if <Условие2> <Действие1>

}

else <Действие 2>

В этом случае укороченный вложенный ifвойдет внутрь составного оператора, а else,по правилам вложения, будет отнесен к внешнемуif, так как он в этом случае будет ближайшим.

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

ì |x|, при |x| £ 1;

y = í x2, при 1 < |x| £ 2;

î 4, иначе.

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

Алгоритм решения данной задачи представлен на рис. 2.

Лабораторная работа № 2. Программирование с использованием ветвлений - student2.ru

Рисунок 2 - Схема алгоритма программы вычисления функции, заданной на отрезках, в заданной точке

Текст программы имеет следующий вид:

#include "stdafx.h"

#include <stdio.h>

#include <math.h>

int main()

{

float x,y;

puts("Input x: ");

scanf("%f",&x);

if(fabs(x)<=1)

{

y=fabs(x);

puts("y=|x|");

}

else

if(fabs(x)<=2)

{

y=x*x;

puts("y=x^2");

}

else

{

y=4;

puts("y=4");

}

printf("For x=%6.2f y=%7.2f\n",x,y);

return 0;

}

Пример 2. Разработать программу, которая определяет можно ли из трех отрезков, представленных действительными числами x,y,z, вводимыми с клавиатуры, построить треугольник. Как известно, основные правила существования треугольника следующие: ни одна сторона не должна быть равна нулю, а суммы двух сторон должна быть больше третьей. Таким образом, нам нужно проверить шесть условий:

x, y, z не равны 0;

x+y>z; y+z>x; x+z>y.

Для реализации проверок следует использовать операторы условной передачи управления.

Текст программы приведен ниже.

#include "stdafx.h"

#include <stdio.h>

#include <math.h>

int main()

{float x,y,z;

puts("Input x,y,z: ");

scanf("%f %f %f",&x,&y,&z);

printf(" x=%6.2f y=%7.2f z=%7.2f\n",x,y,z);

if((x!=0)&&(y!=0)&&(z!=0))

if(((x+y)>z)&&((y+z)>x)&&((z+x)>y))

puts("Treangle is exzist");

else

{

puts("Treangle no exzist, one side > summy other side");

printf(" x=%6.2f y=%7.2f z=%7.2f\n",x,y,z);

}

else

{ puts("Treangle no exzist, is 0 side");

printf(" x=%6.2f y=%7.2f z=%7.2f\n",x,y,z);

}

return 0;

}

Другие примеры программ, содержащих ветвления, приведены в [1].

Порядок выполнения работы

1. Прочитать и проанализировать задание в соответствии со своим вариантом.

2. Разработать схему алгоритма решения задачи.

3. Написать программу.

4. Вызвать среду программирования Visual Studio 2008 , создать новый проект консольного приложения и ввести текст программы в редактор среды программирования.

5. Подобрать тестовые данные (не менее 3-х вариантов).

6. Отладить программу на выбранных тестовых данных.

7. Продемонстрировать работу программы преподавателю.

8. Составить отчет по лабораторной работе.

9. Защитить лабораторную работу преподавателю, ответив на контрольные вопросы.

Требования к отчету

Отчет должен быть выполнен на бумаге формата А4 или А5 в том числе в тетрадях или на тетрадных листах. Если отчет выполняется на отдельных тетрадных листах, то они должны быть аккуратно обрезаны по линии подшивки и скреплены. Неаккуратно выполненные, оборванные или грязные отчеты не принимаются.

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

Каждый отчет должен иметь титульный лист, на котором указывается:

а) наименование факультета и кафедры;

б) название дисциплины;

в) номер и тема лабораторной работы;

г) фамилия преподавателя, ведущего занятия;

д) фамилия, имя и номер группы студента;

е) номер варианта задания.

Кроме того, отчет по лабораторной работе должен содержать:

1) схему алгоритма, выполненную вручную или в соответствующем пакете;

2) текст программы;

3) результаты тестирования, которые должны быть оформлены в виде таблицы вида:

Исходные данные Ожидаемый результат Полученный результат
     

4) выводы.

1.4. Контрольные вопросы

1. Что такое «ветвление»? В каких случаях используется эта конструкция?

2. Как показать ветвление на схеме алгоритма?

3. Какой оператор реализует ветвление в программе?

4. Какой синтаксис имеет этот оператор?

5. Объясните, почему в вашей программе следует использовать ветвление?

6. Как подбирают тесты для отладки программ, содержащих ветвления?

Объем работы: 4 часа

Теоретическая часть

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

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

· счетный цикл (рисунок 3,а);

· цикл-пока (рисунок 3, б);

· цикл-до (рисунок 3, в).

Лабораторная работа № 2. Программирование с использованием ветвлений - student2.ru

Рисунок 3 - Структура циклов, реализованных в С++:

счетный цикл (а), цикл-пока (б) и цикл-до (в)

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

В С++ оператор счетного цикла for имеет следующий систаксис:

for (<Выражение1>;<Выражение2>;<Выражение3>)<Оператор>;

где:

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

Выражение2 –выражение условия; определяет условие завершения цикла, в частности, предельное значение параметра цикла. Может отсутствовать, при этом точка с запятой остается.

Выражение3 – список выражений, которые выполняются на каждой итерации цикла после тела цикла, но до следующей проверки условия. Обычно определяют изменение параметра цикла. Может отсутствовать.

Оператор – тело цикла. Может быть любым оператором С++, в том числе и составным оператором (блоком операторов). Составной оператор применяется, если тело цикла содержит более одного простого оператора. Оператор тела цикла может отсутствовать, в этом случае вмесо него ставится точка с запятой.

Примеры операторов счетного цикла

1. for(int i=0,float s=0; i<n; i++,s+=i); - отсутствует тело цикла

2. for(int i=0,float s=0;i<n;i++)s+=i; - есть все компоненты

3. int i=0;float s=0;

for(;i<n;s+=i++); - отсутствует инициализирующее выражение и тело цикла

4. for(;i<n;)s+=i++; ++); - отсутствует инициализирующее выражение

5. int i;float s; s=0;

for(i=n; i>0;i--) s=s+i;

6. for(;;); - бесконечный цикл.

Пример 1. Разработать программу вычисления суммы n первых натуральных чисел. n вводится с клавиатуры.

Сумма определяется методом накопления. Количество суммируемых чисел известно, поэтому используем цикл с заданным количеством повторений. На каждой итерации цикла к сумме будем добавлять переменную цикла, которая будет изменяться от 1 до n. Перед циклом переменную суммы необходимо обнулить. На рисунке 4 приведена схема алгоритма программы.

Лабораторная работа № 2. Программирование с использованием ветвлений - student2.ru

Рисунок 4 – Схема алгоритма вычисления суммы n натуральных чисел

Текст программы приведен ниже:

#include "stdafx.h"

#include <stdio.h>

int main()

{ int i,n,s;

puts(“Input n”);

scanf(“%d”,&n);

for (i=1,s=0;i<=n;i++) s+=i;

printf("Sum=%5d n=%4d\n",s,n);

return 0;

}

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

Порядок выполнения работы

1. Прочитать и проанализировать задание в соответствии со своим вариантом.

2. Разработать схему алгоритма решения задачи.

3. Написать программу.

4. Вызвать среду программирования Turbo Delphi, создать новый проект консольного приложения и ввести текст программы в среду программирования.

5. Подобрать тестовые данные (не менее 3-х вариантов).

6. Отладить программу на выбранных тестовых данных.

7. Продемонстрировать работу программы преподавателю.

8. Составить отчет по лабораторной работе.

9. Защитить лабораторную работу преподавателю.

Требования к отчету

Отчет должен быть выполнен на бумаге формата А4 или А5 в том числе в тетрадях или на тетрадных листах. Если отчет выполняется на отдельных тетрадных листах, то они должны быть аккуратно обрезаны по линии подшивки и скреплены. Неаккуратно выполненные, оборванные или грязные отчеты не принимаются.

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

Каждый отчет должен иметь титульный лист на котором указывается:

а) наименование факультета и кафедры;

б) название дисциплины;

в) номер и тема лабораторной работы;

г) фамилия преподавателя, ведущего занятия;

д) фамилия, имя и номер группы студента;

е) номер варианта задания.

Кроме того отчет по лабораторной работе должен содержать:

1) схему алгоритма, выполненную вручную или в соответствующем пакете, для решения вашей задачи с одним из трех циклов;

2) текст программы для лучшего с вашей точки зрения варианта;

3) результаты тестирования, которые должны быть оформлены в виде таблицы вида:

Исходные данные Ожидаемый результат Полученный результат
     

4) выводы.

2.4. Контрольные вопросы

1. Что такое «цикл»? В каких случаях используется эта конструкция?

2. Как показать циклический процесс в схеме алгоритма?

3. Какие операторы реализуют ветвление в программе?

4. Какой синтаксис имеют эти операторы?

5. Объясните, почему в вашей программе следует использовать цикл?

6. Почему вы выбрали именно такой тип цикла?

Теоретическая часть

Массивы в С++ представляют собой последовательность ячеек базового типа, доступ к которым может осуществляться либо с указанием индексов (целого или символьного типов), либо с использованием возможностей адресной арифметики.

Согласно правилам С++ все массивы состоят из смежных ячеек памяти. Младший адрес соответствует первому элементу массива, а старший – последнему. Индексы массива всегда начинаются с 0.

Массивы и указатели тесно связаны между собой Трудно описать массивы и обрабатывать их не используя указателей.

Объявление массива:

<Тип элемента> <Имя> [<Размер1>] [= {<Список значений >}];

Количество индексов задает размерность массива. Каждому элементу массива соответствует один или несколько индексов, определяющих положение элемента в массиве.

Тип индекса – порядковый – определяет доступ к элементу.

Нумерация индексов ВСЕГДА начинается с 0.

Размер – определяет количество элементов по данному индексу.

Тип элемента – любой кроме файла, в том числе, другой массив.

Массив в памяти не может занимать более 2 Гб.

Объявление одномерных массивов:

1) Статически

int a[10]; - массив на 10 целых чисел;//индекс меняется 0 - 9

float mas[20] – массив на 20 вещественных чисел;

char sim[8] – массив на 8 символов;

double massiv[30] – массив на 30 вещественных чисел двойной точности;

unsigned int koord[10] – массив целых беззнаковых чисел .

2) Динамически

int *dinmas; указатель на целое;

dinmas=new int [100]; массив на 100 элементов целого типа.

Индекс меняется от 0 до величины, на 1 меньшей указанной в размере

Внешние и статические массивы можно инициализировать при объявлении.

int a[5]={0,-36,78,3789,50};

float b[10]={0,-3.6,7.8,3.789,5.0,6.1,0,-6.5,8.9,3.0};

long double c[4]={7.89L,6.98L,0.5L,56.8L};

short *m={2,3,5,8,12,0,56};

По правилам С++ имя массива является его адресом.

Поэтому для адресации элементов массива независимо от способа описания можно использовать адресную арифметику.

Пример.Разработать программу определения максимального элемента массива A(5) и его номера.

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

Поиск максимального элемента требует дополнительных переменных: amax – для хранения текущего и найденного максимального значения и imax – для хранения номера текущего и найденного максимального значения. Саму операцию поиска выполним следующим образом.

Запомним в качестве текущего максимального, т. е. запишем в amax первый элемент и зафиксируем в imax его номер. Затем будем последовательно просматривать элементы массива, сравнивая их со значением, хранящимся в amax. Если очередной элемент больше значения в amax, то сохраняем его в качестве максимального в amax и запоминаем его номер в imax (рис. 7).

Лабораторная работа № 2. Программирование с использованием ветвлений - student2.ru

Рисунок 7 - Поиск максимального элемента массива: состояние на момент проверки четвертого элемента массива (а), изменение текущего значения максимального элемента и его номера по результатам проверки четвертого элемента массива (б)

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

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

Лабораторная работа № 2. Программирование с использованием ветвлений - student2.ru

Рисунок 8 - Схема алгоритма поиска максимального элемента массива

Ниже приведен текст программы.

#include “stdafx.h”

#include <stdio.h>

int main(int argc, char* argv[])

{float a[5], amax; int i, imax;

puts(“Input 5 values:”);

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

scanf(“%f “,&a[i]);printf(“\n”);

amax=a[0];

imax=0;

for(i=1;i<5;i++)

if(a[i]>amax)

{ amax=a[i]; imax=i;}

puts(“Values:“);

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

printf(“%7.2f ”,a[i]);

printf(“\n”);

printf(“Max = %7.2f number = %5d\n”,amax, imax);

return 0; }

Другие примеры программ, содержащих обработку массивов, приведены в [1].

Порядок выполнения работы

1. Прочитать и проанализировать задание в соответствии со своим вариантом.

2. Разработать схему алгоритма решения задачи.

3. Написать программу.

4. Вызвать среду программирования Turbo Delphi, создать новый проект консольного приложения и ввести текст программы в среду программирования.

5. Подобрать тестовые данные (не менее 3-х вариантов).

6. Отладить программу на выбранных тестовых данных.

7. Продемонстрировать работу программы преподавателю.

8. Составить отчет по лабораторной.

9. Защитить лабораторную работу преподавателю.

Требования к отчету

Отчет должен быть выполнен на бумаге формата А4 или А5 в том числе в тетрадях или на тетрадных листах. Если отчет выполняется на отдельных тетрадных листах, то они должны быть аккуратно обрезаны по линии подшивки и скреплены. Неаккуратно выполненные, оборванные или грязные отчеты не принимаются.

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

Каждый отчет должен иметь титульный лист, на котором указывается:

а) наименование факультета и кафедры;

б) название дисциплины;

в) номер и тема лабораторной работы;

г) фамилия преподавателя, ведущего занятия;

д) фамилия, имя и номер группы студента;

е) номер варианта задания.

Кроме того отчет по лабораторной работе должен содержать:

1) схему алгоритма, выполненную вручную или в соответствующем пакете;

2) текст программы;

3) результаты тестирования, которые должны быть оформлены в виде таблицы вида:

Исходные данные Ожидаемый результат Полученный результат
     

4) выводы.

3.4. Контрольные вопросы

1. Что такое «массив»? В каких случаях используется эта структура данных?

2. Как показать операции с массивом на схеме алгоритма?

3. Какой объявить массив в программе?

4. Как осуществляется ввод и вывод элементов массива?

5. Объясните, почему в вашей программе следует использовать массив?

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

Теоретическая часть

Матрицей называют двумерный массив, т.е. массив, для которого объявлены два индекса. Индексы массива всегда начинаются с 0

Объявление матрицы:

<Тип элемента><Имя>[<Размер1>][<Размер2>]...[={<Список значений >}];

Тип индекса – порядковый – определяет доступ к элементу.

Нумерация индексов ВСЕГДА начинается с 0.

Размер – определяет количество элементов по данному индексу.

Тип элемента – любой кроме файла, в том числе, другой массив.

Массив в памяти не может занимать более 2 Гб.

Описание матриц:

1) Статически, на этапе компиляции

int a[4][5] – матрица целого типа из 4 строк и 5 столбцов индексы меняются первый от 0 до 3, второй от 0 до 4

float matr[10][20] – матрица вещественного типа из 10 строк и 20 столбцов

double x[10][10] – матрица вещественного типа с двойной точностью из 10 строк и 10 столбцов

2) С помощью указателей.

Память под такую матрицу выделяется:

А) статически при инициализации

short **r={{3,5,9,7},{1,4,7,0},{12,5,90,3}} – под массив будет выделена память по количеству определенных элементов (три строки по 4 элемента)

Б) динамически во время выполнения

float **c;

c=new float * [4];

for (int i=0;i<4; i++) c[i]= new float [5];

под массив будет выделена память 4 строки по 5 элементов.

Матрицы расположены в памяти “построчно”, т.е. правые индексы меняется быстрее, чем расположенные левее.

Например: Матрица А[3][4] в памяти выглядит так:

Лабораторная работа № 2. Программирование с использованием ветвлений - student2.ru

Если количество индексов превышает 2, массив называют многомерным.

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

Пример.Разработать программу вычисления сумм элементов строк матрицы A(4,5). Полученные суммы записать в новый массив B.

Итак, задана матрица, имеющая 4 строки и 5 столбцов (рис. 1, а). Требуется сформировать одномерный массив B из четырех элементов, который будет содержать суммы элементов строк (рис. 1, б). Распечатать результат лучше так, чтобы суммы были выведены после соответствующей строки матрицы, как на рис. 9.

Лабораторная работа № 2. Программирование с использованием ветвлений - student2.ru

Рисунок 9 – Исходные данные (а) и результат (б) примера

Программа должна начинаться со ввода матрицы. Основной цикл программы – цикл по строкам. Переменная цикла i в этом цикле будет изменяться от 0 до 4. Для каждой i-й строки в этом цикле должно выполняться суммирование элементов. Суммирование будем осуществлять методом накопления, для чего перед суммированием обнулим соответствующий i-й элемент массива B, а затем в цикле выполним добавление элементов строки. После завершения цикла суммирования эту строку и ее сумму можно сразу выводить. На рис. 10 представлена схема алгоритма программы (пунктиром выделено суммирование элементов i-й строки).

Лабораторная работа № 2. Программирование с использованием ветвлений - student2.ru

Рисунок 10 – Схема алгоритма программы нахождения сумм элементов строк (пунктиром выделено суммирование элементов i-ой строки)

Ниже приведен текст программы.

#include “stdafx.h”

#include <stdio.h>

int main(int argc, char* argv[])

{float a[4][5], b[4]; int i, j;

puts(“Enter a matrix in the lines:”);

for (i=0;i<4;i++) // вводим матрицу

for (j=0;j<5;j++) scanf(“%f “,&a[i]);printf(“\n”);

for (i=0;i<4;i++) // для каждой строки

{ b[i]=0; //обнуляем накапливаемую сумму

for (j=1;j< 5;j++)

B[i]=B[i]+A[i][j]; //суммируем элементы строки

for (j=1;j< 5;j++)

printf(“%7.2f ”,a[i][j]); //выводим строку

printf(“The sum is equal: %7.2f ”, b[i]); } //выводим сумму

return 0; }

Другие примеры программ, содержащих обработку матриц, приведены в [1].

Порядок выполнения работы

1. Прочитать и проанализировать задание в соответствии со своим вариантом.

2. Разработать схему алгоритма решения задачи.

3. Написать программу.

4. Вызвать среду программирования Turbo Delphi, создать новый проект консольного приложения и ввести текст программы в среду программирования.

5. Подобрать тестовые данные (не менее 3-х вариантов).

6. Отладить программу на выбранных тестовых данных.

7. Продемонстрировать работу программы преподавателю.

8. Составить отчет по лабораторной работе.

9. Защитить лабораторную работу преподавателю.

Требования к отчету

Отчет должен быть выполнен на бумаге формата А4 или А5 в том числе в тетрадях или на тетрадных листах. Если отчет выполняется на отдельных тетрадных листах, то они должны быть аккуратно обрезаны по линии подшивки и скреплены. Неаккуратно выполненные, оборванные или грязные отчеты не принимаются.

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

Каждый отчет должен иметь титульный лист, на котором указывается:

а) наименование факультета и кафедры;

б) название дисциплины;

в) номер и тема лабораторной работы;

г) фамилия преподавателя, ведущего занятия;

д) фамилия, имя и номер группы студента;

е) номер варианта задания.

Кроме того отчет по лабораторной работе должен содержать:

1) схему алгоритма, выполненную вручную или в соответствующем пакете;

2) текст программы;

3) результаты тестирования, которые должны быть оформлены в виде таблицы вида:

Исходные данные Ожидаемый результат Полученный результат
     

4) выводы.

4.4. Контрольные вопросы

1. Что такое «матрица»? В каких случаях используется эта структура данных?

2. Как показать обработку матриц в схеме алгоритма?

3. Какие приемы обработки матриц вы знаете?

4. Какой синтаксис имеет описание матриц?

5. Объясните, почему в вашей программе следует использовать матрицу?

6. Как подбирают тесты для отладки программ, содержащих обработку матриц?

Теоретическая часть

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

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

Процедуры предназначены для выполнения некоторых действий (например, печать строки), а функция – позволяет получить некоторую величину, которую возвращает в качестве результата.

Однако, принципы программирования С++ основаны на понятии функции. Поэтому, в С++ нет процедур, как элементов языка, однако средства языка позволяют создавать функции, которые не возвращают значения и реализуют конструкцию, аналогичную процедурам

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

Описание функций:

1. Каждая программа обязательно должна включать единственную функцию с именем main (главная функция).

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

3. Для доступности в программе, функция должна быть в ней определена или описана до первого вызова.

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

<Тип результата> <Имя > ([<Список параметров>])

{ [< Объявление локальных переменных и констант >]

<Операторы> }

По правилам С++ подпрограмму можно описывать в любом месте программы и даже в другом файле, но только не внутри другой функции.

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

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

а) неявно – с использованием глобальных переменных;

б) явно – через параметры.

Неявная передача:

1) приводит к большому количеству ошибок;

2) жестко связывает подпрограмму и данные.

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

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

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

Каждый формальный параметр не только перечисляется (именуется), но и специфицируется (для него задается тип).

Совокупность формальных параметров определяет сигнатуру функции.

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

Спецификация формальных параметров это либо пусто, либо void либо список отдельных параметров.

Примеры:

float max(float a,float b){….}

int fun1() {…..}

char F2(void) {…..}

Фактическиминазываются параметры, задаваемые при вызове функции.

Формальные и фактические параметры должны совпадать:

- по количеству;

- по типу;

- по порядку следования.

Однако, имена формальных и фактических параметров могут не совпадать.

Пример:

int k,l,n=6; float d=567.5,m=90.45

void fun2(int a,float c,float b){….} // описание функции fun2

fun2(n,d,m); // Правильный вызов

fun2(4,8.7); // Ошибка в количестве параметров

fun2(4.67, 5,7); // ошибка в типах параметров

fun2(3,m,d); // ошибка в порядке следования контролируется пользователем

Если в качестве параметров передаются параметры значения, то в качестве фактических можно передавать переменные, константы и выражения.

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

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

Будем считать площадь четырехугольника как сумму площадей двух треугольников, определенных по формуле Герона. Вычисление площади треугольника оформим как подпрограмму. Исходные данные такой подпрограммы – длины сторон треугольника. Подпрограмма не должна менять значения параметров, поэтому их можно передать как параметры-значения или параметры-константы. Результат работы этой подпрограммы – скалярное значение, значит, она может быть реализована как функция. Однако ее также можно реализовать как процедуру, которая возвращает результат через параметр-переменную. Схемы алгоритма <

Наши рекомендации