Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР№1- Вариант 8

.docx
Скачиваний:
24
Добавлен:
09.05.2015
Размер:
232.65 Кб
Скачать

Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ

УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра компьютерных систем в управлении и проектировании (КСУП)

ОТЧЕТ

Лабораторная работа №1

по дисциплине “программирование”

по учебно-методическому пособию Потаповой Е.А.

Выполнил студент

2015 г.

СОДЕРЖАНИЕ

1. Введение 3

2. Анализ задачи № 1 4

3. Решение задачи №1 5

3.1. Описание используемых переменных, обоснование выбора типа данных 5

3.2. Описание алгоритма 6

3.3. Блок-схема программы 7

4. Анализ задачи № 2 8

5. Решение задачи №2 9

5.1. Описание используемых переменных, обоснование выбора типа данных 9

5.2. Описание алгоритма 10

5.3. Блок-схема программы 11

6. Заключение 12

Приложение 1. Листинг программ 13

Задача 1. 13

Задача 2. 14

Приложение 2. Распечатки тестов 15

Задача 1. 15

Задача 2. 16

1. Введение

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

Условный оператор применяется для задания разветвления в программе, т. е. выбора действий в зависимости от истинности или ложности какого-либо условия. Имеется две формы условного оператора: полная и сокращенная.

Операторы цикла применяется для многократного исполнения набора инструкций. Операторы цикла бывают с предусловием, с постусловием и с параметром.

2. Анализ задачи № 1

Задача 1.

Дано: натуральное n, действительные a1, a2, ..., an. Вычислить: a1 + a2 * (a2 –1) + a3 * (a3 –1) * (a3 – 2) + a4 * (a4 – 1) * * (a4 – 2) * (a4 – 3) + ... + an * (an – 1) * (an – 2) *...* (an – n +1).

Анализируя формулу, мы видим, что она состоит из суммы n слагаемых, каждое из которых представляет собой произведение an * (an – 1) * (an – 2) *... * (an – n +1), т.е. для а1 это 1 множитель, для а2 – 2, и т.д. Поэтому в данной задаче будем использовать 2 цикла с параметром. Внешний цикл будет служить для наращивания суммы из произведений, вычисляемых во внутреннем цикле.

3. Решение задачи №1

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

Переменные:

N – количество чисел, целочисленный тип integer;

i, j – переменные циклов, целочисленный тип integer;

a – действительное число (по условию задачи), вещественный тип real;

P – произведение чисел вещественного типа, вещественный тип real;

S – сумма чисел вещественного типа, вещественный тип real.

3.2. Описание алгоритма

  1. Вводим значение переменной n. Так как пользователь может случайно ввести отрицательное число, то необходимо дать ему возможность для повторного ввода значения переменной n. Поэтому организуем цикл с постусловием;

  2. Устанавливаем начальное значение S=0;

  3. Организуем цикл по переменной i. В цикле запрашиваем ввод числа ai. Устанавливаем значения переменной P=1

  4. Вычисления произведение по формуле P = P * (a - j) во внутреннем цикле по переменной j.

  5. К S прибавляем результат произведения из цикла по j;

  6. Выводим значение S.

3.3. Блок-схема программы

4. Анализ задачи № 2

Задача 2.

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

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

5. Решение задачи №2

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

S – исходная строка, вводимая с клавиатуры, строковый тип string;

str – строка для хранения промежуточных выборок одинаковых символов, строковый тип string;

res – результат работы программы, в этой строке будет сохраняться str наибольшей длины, строковый тип string

i – переменная цикла, целочисленный тип integer;

5.2. Описание алгоритма

  1. Вводим строку.

  2. В строку str, предназначенную для промежуточного хранения выборок одинаковых символов, копируем первый символ исходной строки.

  3. Организуем цикл с параметром i от 1 до длины строки str, уменьшенной на единицу (для того чтобы избежать выхода за пределы массива при сравнении i-го и i+1-го элементов).

  4. Сравниваем i-й и i+1-й символ. Если они равны, то в строку str добавляем символ S[i+1], иначе очищаем строку str, записывая туда S[i+1].

  5. Сравниваем длину строки str со строкой res, если она большей длины, то переписываем в с троку res строку str.

  6. Выводим результат.

5.3. Блок-схема программы

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

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

Приложение 1. Листинг программ

Задача 1.

program Lab1_var8_z1;

var N, //количество чисел

i,j:integer; //переменные циклов

a, // действительное число

P, // произведение а*(а-1)*...*(а-n)

S:real; //итоговая сумма

Begin

//Контроль ввода значения N>0

Repeat

Writeln('Введите N>0 - количество действительных чисел:');

Readln(N);

until N>0;

// Начальное значение суммы

S:=0;

//Внешний цикл с параметром для ввода значений а

for i:=1 to N do

begin

Writeln('Введите ',i,'-e число:');

Readln(a);

P:=1; //начальное значение произведения

// Внутренний цикл для вычисления произведения а*(а-1)*...*(а-n)

for j:=0 to i-1 do

P:=P*(a-j);

S:=S+P; // увеличиваем итоговую сумму на P

end;

Writeln('S = ',S); //вывод значения

End.

Задача 2.

Program lab1_var8_z2;

var S, // исходная строка

str, //промежуточный результат

res:string; //результат программы

i:integer; //счетчик цикла

Begin

//ввод строки

Writeln('Введите строку');

Readln(S);

str:=S[1];

//цикл, в котором сравниваются два соседних символа

//если символы одинаковые, то второй символ добовляется в строку

//мромежуточного результата, иначе символ заменяет прежнюю строку

for i:=1 to length(S)-1 do

begin

if S[i]=S[i+1] then str:=str+S[i+1] else str:=S[i+1];

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

if length(str)>length(res) then res:=str;

end;

Writeln('Самая длинная подстрока состоящая из одинаковых символов: ',res);

End.

Приложение 2. Распечатки тестов

Задача 1.

1. Ввод N≤0:

2. 1 действительное число:

3. Несколько действительных чисел:

Проверяем правильность расчетов в калькуляторе:

Задача 2.

1. Произвольная строка символов:

2. Произвольная строка символов:

Соседние файлы в предмете Основы алгоритмизации и программирования