Лабораторная работа №3 "Программирование" Вариант №9 ТУСУР
Лабораторная работа № 3 состоит из двух задач. Первая задача посвящена созданию программ, отражающих приемы работы с файлами. Необходимо в начале программы создать файл (элементы файла вводятся с клавиатуры или генерируются случайным образом), а в конце программы сначала вывести на экран содержимое созданного файла, а затем отразить полученные результаты. Во второй задаче необходимо составить программу, реализующую рекурсивный алгоритм. В ходе выполнения лабораторной работы № 3 необходимо составить программы на языке Паскаль.
Задача 3.1. type series=file of real;Описать функцию neg(s), подсчитывающую сумму отрицательных элементов в файле s типа series.
Переменные:
а) основная программа:
f — файл вещественных чисел (глобальная переменная);
y — очередное число для записи в файл (глобальная переменная);
n — сумма отрицательных элементов файла (глобальная переменная);
k — счетчик цифр.
б) функция neg:
s — файловая переменная (локальная, формальная переменная);
x — очередной элемент файла (локальная переменная);
sum — сумма отрицательных элементов файла (локальная переменная).
Алгоритм решения задачи:
1) свяжем файл proba.txt с файловой переменной f и откроем его для
записи;
2) организуем цикл, в котором вводим числа и записываем их в файл
до тех пор, пока не введем 0;
3) вызываем функцию neg, в которой открываем файл для чтения,
считываем последовательно элементы файла и определяем сумму отрицательных элементов файла;
4) выводим значение суммы на экран.
type series=file of real;var f : series; n,y : real;51function neg(var s : series) : real;var sum,x : real;begin reset(s); sum:=0; while not eof(s) do begin read(s,x); if x<0 then sum:=sum+x end; neg:=sum ; close(s)end;begin assign (f,'proba.txt'); rewrite(f); repeat write('Введите число (0 – конец ввода)– '); readln(y); write(f,y); until (y=0); close (f); n:=neg(f); writeln('Сумма отрицательных элементов файла n= ',n:10:3); close(f);end.
Задача 3.2. type row=file of 0..999;
Описать логическую функцию sort(r), проверяющую, упорядочены ли
по возрастанию элементы непустого файла r типа row.
type row1 = 0..999; row = file of row1;var r : row; x,y : row1; i,k : integer;
function sort(var r : row) : boolean;
Задача 3.3. type reals=file of real;
Описать функцию less(f) от непустого файла f типа reals, которая
подсчитывает количество элементов файла f, меньших среднего арифметического всех элементов этого файла.
type reals = file of real;
var f1 : reals; a : real;l,i : integer;
function less(var f : reals) : integer;
var k : integer; x,s : real;
begin {подсчет среднего арифметического:}
reset(f); k:=0; s:=0; repeat read(f,x); k:=k+1; s:=s+x until eof(f); s:=s/k;{новый просмотр f и подсчет элементов <s:} reset(f); k:=0; repeat read(f,x); if x<s then k:=k+1 until eof(f); less:=k; close(f)end;begin assign(f1,'c:\tp\work\23.dat');53 rewrite(f1); for i:=1 to 10 do begin readln(a); write(f1,a); end; l:=less(f1); close(f1); writeln('l=', l);end.
Рекурсия
Задача 3.4. Использовать рекурсию для нахождения цифрового корня целого числа.
Цифровой корень находится суммой через сумму цифр числа до тех
пор, пока эта сумма сама не станет цифрой. Например, для числа
9999999 цифровой корень находится так:
9+9+9+9+9+9+9 = 63;
6+3 = 9.
Цифровой корень 9999999 равен девяти.
Переменные:
а) в функции num:
n — целое число (глобальная переменная);
s — вспомогательная переменная (локальная переменная);
б) в функции root:
n — целое число (глобальная переменная);
в) в основной программе:
n — целое число (глобальная переменная).
Алгоритм решения задачи:
1) создаем описание функций num и root;
2) вводим целое число n;
3) вызываем рекурсивную функцию root и определяем цифровой корень числа n;
4)завершаем работу программы.
var n:longint;
function num(i:longint):integer;
var s: integer;begin s:=0;repeat s:=s+n mod 10;n:= n div 10;until n=0;54num:=s;end;function root(l:longint):integer;begin if n<10 then root:=n else begin n:=num(n); root:=root(n); end;end;begin write('Введите целое число n='); readln(n); writeln('Его цифровой корень равен : ', root(n));end.
Задача 3.5. Напишите рекурсивную программу вычисления суммы n 2r n : integ