Курсовая работа
Основы алгоритмизации и
программирования
Введение
алгоритм программа математический
Алгоритмический язык Паскаль разработан профессором Цюрихского технологического института Никлаусом Виртом в 1969-71 годах для обучения студентов структурному программированию. Идеи, заложенные в основу создания языка, позволили фирме Borland International значительно расширить алгоритмические средства языка, а удобный интерфейс (меню команд) и высокая скорость компиляции (процесса перевода текста программы в машинные коды) сделали язык Турбо-Паскаль (Turbo-Pascal) одним из самых распространенных среди начинающих и профессиональных программистов.
Процесс программирования начинается, как правило с составления алгоритма - последовательности операций, описывающих процесс решения задачи. Графическая запись алгоритма представляется в виде блок-схемы. Составление алгоритма заключается в логическом описании процесса решения задачи и требует знания элементов математической логики. Следует отметить, что программированию предшествует важнейший этап - постановка задачи. Постановка задачи может включать широкий спектр вопросов (разработка математических и физических моделей, вывод расчетных формул и т.п.). Программист должен четко представлять явление или формулу, которые он алгоритмизирует.
Программирование заключается в записи алгоритма на языке программирования и отладке программы. Текст программы записывается в текстовом редакторе, затем программа компилируется - переводится транслятором (переводчиком) в машинные коды и запускается на выполнение.
В Pascal имеется достаточно широкий набор простых и структурированных типов данных: целые и вещественные числа, символьные данные, перечисления, логические (булевы) значения, массивы, записи, последовательные файлы и ограниченный тип множеств. Оператор type позволяет программисту определять новые типы данных, хотя не обеспечивает группирование и инкапсуляцию определения нового типа данных с набором подпрограмм, обеспечивающих выполнение основных операций над объектами данных этого нового типа. Кроме того, указатель и операция создания новых объектов данных любого типа позволяют программисту конструировать новые объекты связанных данных непосредственно во время выполнения программы.
Подпрограммы принимают форму функций (если они возвращают одно какое-либо значение) или процедур (если их действие сводится к модификации переданных параметров или глобальных переменных).
Паскаль достаточно быстро превратился из средства, предназначенного для обучения студентов программированию, в инструмент, который стали использовать для создания больших программных проектов.
Главной целью курсового проекта по дисциплине «Основы алгоритмизации и программирования» является создания условий для освоения студентами основ проектирования программных комплексов, а также закрепления навыков программирования на языке Pascal.
Задание на курсовой проект представляет собой задания на решение задач различных типов сложности и охватывает все этапы проектирования программы, начиная от анализа задачи и заканчивая разработкой необходимой документации.
Самостоятельно выполнявший курсовой проект студент приобретает практические навыки и умения в реализации таких важных этапов разработки программы, как анализ алгоритма, разработка организации данных, составление алгоритма, подготовка текстов, написание программы, отладка программы, разработка документации.
Цели курсового проектирования:
− решение задач и разработка базы данных;
− систематизация и закрепление теоретических знаний и практических умений, полученных за время обучения дисциплины «Основы алгоритмизации и программирования».
Реализация данных целей возможна путем решения следующих задач:
− анализ литературы по поставленной задаче;
− оценка возможностей альтернативных языков программирования;
− оптимизация алгоритмов решения данной задачи для достижения максимального быстродействия.
Вычислить сумму ряда с точностью e=10-4
.1 Математическая формулировка задачи и выбор метода обработки информации
Для решения данной задачи используется следующая формула:
Сумму необходимо вычислять до тех пор пока сумма ряда не станет меньше чем e=10-4.
.2 Форма представления исходных данных
Исходные данные вводятся с клавиатуры.
Пользователь вводит значение X с клавиатуры. После производятся
вычисления до значения с точностью, равной 10-4. После нахождения
результата сумма выводится на экран.
1.3 Описание программы
program z126;
var i:integer; // раздел описания переменных
e, sum, a, x:real;
function fact (n: integer): longint; // функция вычисления // факториала
begin n <= 1 then:= 1
else
fact:= n * fact (n - 1)
end;
begin
writeln ('Введите х= '); // ввод X
read(x);:=0.0001; // устанавливаем точность
sum:=0;:=1;:=0;abs(a)<=e do begin:=power (-1, i+1)*(power (x, 2*i-1)*(2*i+x))/fact (2*i);
// вычисляем сумму ряда
sum:=sum+a;:=i+1;
end;
('сумма=', sum:6:10); // вывод суммы
end.
.4 Инструкция по эксплуатации программы
После запуска появится строка «Введите Х=». После необходимо
ввести значение переменной Х. Далее производятся необходимые вычисления и
выводится результат «Сумма=».
1.5 Результаты проведенных расчетов и их анализ
Для проведения тестирования выполним программу для некоторого значения Х.
Введем число 3. Сумма = 7,5;
В результате тестирования ошибок в работе программы не обнаружено.
2. Постановка задачи и выбор метода обработки информации
В квадратной матрице в каждой строке переставить ее максимальный и минимальный элементы.
.1 Математическая формулировка задачи и выбор метода обработки
информации
Для решения данной задачи необходимо найти максимальный и минимальный элементы в каждой строке. Запомнить позиции на которых стоят эти элементы и поменять их местами.
.2 Форма представления исходных данных
Исходные данные вводятся пользователем с клавиатуры. Сначала вводится размерность матрицы N, после вводятся элементы матрицы.
Пользователь вводит размерность матрицы и ее элементы с клавиатуры. После первому элементу каждой строки присваивается минимальное / максимальное значение. Далее происходит сравнивание каждого элемента строки с максимальным / минимальным элементом и если находится такой, что удовлетворяет условию, он становится максимальным или минимальным и запоминается позиция данного элемента. После производится обмен максимального и минимального элемента.
.3 Описание программы
program z215;
// раздел описания переменныхn, i, j, min, max, tmp, xmax, xmin, ymax, ymin:integer;:array [1..10, 1..10] of integer;
begin('Введите n= '); // ввод размерности матрицы
read(n);
for i:=1 to n do
for j:=1 to n do begin
write ('введите элемент матрицы = '); // ввод элементов матрицы
read (mas[i, j]);
end;
// устанавливаем положение минимального и максимального элемента
ymax:=1;:=1;:=1;
for i:=n downto 1 do begin:=mas [i, 1];:=mas [i, j];
for j:=1 to n do
begin
// поиск максимального элемента и запоминание позиции где стоит элемент
if mas [i, j]>=max then begin max:=mas [i, j]; xmax:=i; ymax:=j; end;
// поиск минимального элемента и запоминание позиции где стоит элемент
if mas [i, j]<min then begin min:=mas [i, j]; xmin:=i; ymin:=j; end;;
writeln ('max=', max);('min=', min);:=mas [xmax, ymax];
// обмен максимального и минимального элементов в каждой строке
mas [xmax, ymax]:=mas [xmin, ymin];[xmin, ymin]:=tmp;
end; i:=1 to n do begin // вывод матрицы
for j:=1 to n do begin(' ', mas [i, j]);
end;
writeln;
end;
end.
.4 Инструкция по эксплуатации программы
После запуска программы необходимо ввести размерность матрицы «Введите N=», также ввести элементы матрицы. Далее выполняется программа и результат выводится на экран.
.5 Результаты проведенных расчетов и их анализ
Для проведения тестирования выполним программу для некоторого значения N.
Введем размерность матрицы - 3. Введем элементы матрицы - 1, 2, 3, 4, 5, 6, 7, 8, 9.
Ответ: 3 2 1
5 4
8 7
В результате тестирования ошибок в работе программы не обнаружено.
Дан одномерный массив. Все положительные элементы расположить в порядке возрастания, отрицательные - в порядке убывания, нулевые оставить без изменения. Относительного расположения отрицательных и положительных элементов не менять. Использовать сортировку прямыми вставками с барьерами, реализовав метод в виде подпрограммы.
.1 Математическая формулировка задачи и выбор
метода обработки информации
Для решения данной задачи необходимо выбрать отрицательные и положительные элементы массива в отдельные массивы. Отсортировать положительные элементы в порядке возрастания, отрицательные - в порядке убывания прямыми вставками с барьером. После этого сравнить знаки элементов исходного массива и если элемент положительные-то на это место вставить элемент из «положительного» массива, если элемент отрицательный-то вставить элемент из «отрицательного» массива.
.2 Форма представления исходных данных
Исходные массив вводятся с клавиатуры пользователем.
Пользователь вводит размер массива. После из массива выбираются все отрицательные и положительные элементы, сортируются и расставляются на места. Результат выводится на экран.
.3 Описание программы
program z31;
// раздел описания переменных
var n, i, k, p, kol,
kolotr:integer;:array [0..100] of integer;:array [0..100] of integer;:array
[0..100] of integer;
procedure sortp (masl:array [0..100] of integer; kolvo:integer;
var maspl:array [0..100] of integer);
// процедура сортировки положительных чисел массива
var i, b, j, k:integer;
begin
k:=1;
for i:= 1 to kolvo do begin // выбор положительных элементов
if masl[i]>0 then
begin
maspl[k]:=masl[i];:=k+1;
end;; i:=2 to kolvo do begin:=maspl[i]; // устанавливаем барьер
maspl[0]:=B;:=i-1;B<maspl[j] do begin[j+1]:=maspl[j]; // сортировка массива
j:=j-1;
end;[j+1]:=B;
end;; sorto (masl:array [0..100] of integer; kolvo:integer;
var maspo:array [0..100] of integer);
// сортировка отрицательных элементов массива
var i, b, j, o:integer;
begin
o:=1;
for i:= 1 to kolvo do begin
if masl[i]<0 then // выборка отрицательных элементов
begin
maspo[o]:=masl[i];:=o+1;
end;;
for i:=2 to kolvo do begin:=maspo[i]; // установка барьера
maspo[0]:=B;:=i-1;
while B>maspo[j] do begin // сортировка отрицательных элементов
maspo [j+1]:=maspo[j];:=j-1;
end;
maspo [j+1]:=B;
end;;
begin
read(n);
for i:=1 to n do begin('введите элемент массива = '); // ввод элементов массива
read (mas[i]);
end;
for i:= 1 to n do begin mas[i]>0 then kol:=kol+1;
// подсчет количества отрицательных и положительных элементов массива
if mas[i]<0 then kolotr:=kolotr+1;
end;
sortp (mas, n, masp); // сортировка положительных элементов
sorto (mas, n, maso); // сортировка отрицательных элементов
k:=1;:=1;
for i:=1 to n do
begin mas[i]>0 then
begin
mas[i]:=masp [n-kol+k]; // вывод отсортированных положительных элементов на их относительное положение
k:=k+1;
end;
if mas[i]<0 then
begin
mas[i]:=maso [n-kolotr+p]; // вывод отсортированных отрицательных элементов на их относительное положение
p:=p+1;
end else if mas[i]=0 then mas[i]:=0;
end;
for i:=1 to n do begin(' ', mas[i]); // вывод массива
end;
writeln;
end.
3.4 Инструкция по эксплуатации программы
После запуска необходимо ввести размер массива «Введите n:». Далее необходимо ввести элементы массива. Размер массива должен быть не больше 100 элементов. Далее выполняется сама программа и отсортированный массив выводится на экран.
.5 Результаты проведенных расчетов и их анализ
Протестируем программу. Для этого введем размерность массива - 5. Введем поочередно элементы массива - 6, 1, -1, -7, 4. В результате получаем - 1, 4, -1, -7, 4. При тестировании программы ошибок обнаружено не было.
Дан текст. Между соседними словами - не менее одного пробела, за последним словом - точка. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: перенести первую букву в конец слова. Результат вывести на экран и в текстовый файл.
.1 Математическая формулировка задачи и выбор
метода обработки информации
Для решения задачи необходимо разделить весь текст на слова. Потом сравнить каждое слово с последним и если они различны перенести первую букву этого слова в конец. В качестве разделителей слов принимается пробел.
.2 Форма представления исходных данных
Текст вводится пользователем с клавиатуры.
.3 Разработка алгоритма и его описание
Пользователь вводит текст. Проводится проверка на наличие
точки в конце предложения. После этого весь текст делится на слова.
Разделителем является пробел. Каждое слово заносится в массив. После этого идет
сравнивание каждого слова с последним. Если они различны, то вырезается первая
буква слова и добавляется в конец этого же слова. После выводятся слова
отличные от последнего слова на экран.
4.4 Описание программы
program z412;
var
// раздел описания переменных
txt, word, tmp:string;
c:char;
i, j, k, post:integer;
mas: array [0..100] of string;:text;
begin
writeln ('Введите строку= '); // ввод строки
read(txt);
if txt [length(txt)]<>'.' then writeln ('Это не текст!') else
// проверка наличия точки в конце предложения
begin
:=1;
for i:=1 to length(txt) - 1 do // разбиение текста по словам
begin txt[i] = ' ' then
begin length(tmp) <> 0 then
begin
mas[j]:=tmp;:= j+1;:='';
end;begin
tmp:= tmp + txt[i];
if i=length(txt) - 1 then
if length(tmp) <> 0 then[j]:=tmp;
end;;
:=mas[j];
(f, 'tmp.txt'); // открытие текстового файла
rewrite(f);
for i:=1 to j-1 do
begin(mas[i] <> word) then // сравнивание слов с последним словом предложения
begin
c:=mas[i] [1];
// перемещение первого элемента слова в конец слова
write (mas[i]+' '); // вывод слов(f, mas[i]+'
');
end;;
close(f);
end;.
.5 Инструкция по эксплуатации программы
После запуска программы необходимо ввести текст. Обязательным условием является наличие точки в конце предложения. После этого программа выполнит все действия и выведет результат на экран.
.6 Результаты проведенных расчетов и их анализ
Протестируем программу, введя текст - aaaб бббв вввд дддг
аааб. Полученный результат - ббвб ввдв ддгд.