Return 0; //завершение работы программы
Else
{
f_chisla = fopen("E:/User/f_chisla.txt", "w");
fprintf(f_chisla, "%5d", i);
}
do
{
printf("\nОчередное число: ");
scanf("%d", &i);
if (i != 0)
fprintf(f_chisla, "%5d", i);
else break;
}
while(1);
fclose(f_chisla); //закрытие файла
//открываем файл для чтения
f_chisla = fopen("E:/User/f_chisla.txt", "r");
//и читаем первое записанное в нем число
fscanf(f_chisla, "%d", &i);
min = i; //текущие min и max числа и их позиции
max = i;
i_min = 0;
i_max = 0;
count = 1; //количество прочитанных чисел
summa = i; //сумма прочитанных чисел
printf("\nЧисла, записанные в файл:\n ");
printf("%5d", i);
while (!feof(f_chisla))
{
fscanf(f_chisla, "%d", &i);
count++;
summa += i;
printf("%5d", i);
if (i < min)
{
min = i;
i_min = ftell(f_chisla); //позиция числа в файле
}
if (i > max)
{
max = i;
i_max = ftell(f_chisla); }
}
printf("\n");
printf("\nВ файле записано %d чисел", count);
printf("\nСумма этих чисел %d: ", summa);
sr_arifm = (float) summa/count;
printf("\nСреднее арифметическое %5.3f: ", sr_arifm);
printf("\nmin = %d", min);
printf("\ni_min = %d", i_min);
printf("\nmax = %d", max);
printf("\ni_max = %d", i_max);
fclose(f_chisla);
return 0;
}
4. Компиляция, отладка, тестирование и получение результата:
Задание 2.
Создать текстовый файл, в который построчно записать квадратный массив massivnn, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размер массива n задать константой. Границы диапазона v_min и v_max задать с консоли. Прочитать из созданного файла числа построчно, главную и побочную диагонали массива и вывести их на экран. При чтении из файла массив не использовать и считать размер массива неизвестным.
1. Создадим на D:\Userфайл chisla.txt, откроем его для записи и запишем в него созданный массив построчно, разделяя элементы массива пробелами. Откроем его для чтения и прочитаем до конца, определив количество count записанных в нем чисел. Определим размер записанного массива m , взяв корень квадратный из найденного количества чисел. Снова откроем файл для чтения, и прочитаем записанные в нем числа двумя вложенными циклами: внешним (i)– по строкам, и внутренним (j) – по столбцам. При i=j читается число на главной диагонали, при i=n-j+1 читается число на побочной диагонали.
2. Схема алгоритма решения задачи:
3. Код программы
3.1. На языке Паскаль:
Program Variant_0;
Uses WinCrt;
Const n = 5; {задание размера массива именованной константой}
Var i, j : Word;
k, v_min, v_max, count, m1, n1: Integer;
massiv : Array [1..n, 1..n] Of Integer;
f: Text;
Begin
Randomize; {запуск генератора случайных чисел}
WriteLn('Лабораторная работа №8_2');
WriteLn('Вариант №0');
WriteLn('ИС-11-1');
WriteLn('Пупкин Василий');
WriteLn;
WriteLn('Задайте диапазон случайных чисел');
Write('v_min=');
ReadLn(v_min);
Write('v_max=');
ReadLn(v_max);
For i:=1 To n Do {заполнение массива случайными числами}
For j:=1 To n Do
massiv[i,j]:=Random(v_max-v_min + 1) + v_min;
Assign(f, 'D:\User\f.txt');
ReWrite(f); {открываем файл для записи}
For i:=1 To n Do {записываем в файл исходный массив построчно}
Begin
For j:=1 To n Do
Write(f, massiv[i,j]:5);
WriteLn(f);
End;
Close(f); {закрываем файл}
ReSet(f); {открываем файл для чтения}
count:=0; {количество записанных в файле чисел}
While (Not(EOF(f))) Do
Begin
Read(f, k);
count:=count+1;
End;
ReSet(f);
m1:=0; {количество чисел в первой строке – количество столбцов}
While (Not(EOLn(f))) Do
Begin
Read(f, k);
m1:=m1+1;
End;
n1:=count div m1; {количество строк}
WriteLn;
Writeln('строк=', n1);
Writeln('столбцов=', m1);
WriteLn;
WriteLn('Прочитанный из файла массив:');
WriteLn;
ReSet(f);
For i:=1 To n1 Do
Begin
For j:=1 To m1 Do
Begin
Read(f, k); {читаем очередное число}
Write(k:5); {и выводим его на экран}
End; {j}
WriteLn;
End; {i}
WriteLn;
WriteLn('Главная диагональ:');
Reset(f); {снова открываем файл для чтения}
For i:=1 To n1 Do
Begin
For j:=1 To m1 Do
Begin
Read(f, k);
If (i=j)
Then Write(k:5);
End; {j}
End; {i}
WriteLn;
WriteLn('Побочная диагональ:');
Reset(f); {снова открываем файл для чтения}
For i:=1 To n1 Do
Begin
For j:=1 To m1 Do
Begin
Read(f, k);
If (i=m1-j+1)
Then Write(k:5);
End; {j}
End; {i}
WriteLn;
Close (f);
End.
3.2. На языке Си:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
// прототип функции формирования квадратного массива
void vorm_mass(int nn, int mass_max, int mass_min, int mass[nn][nn]);
Int main()
{
int i, j, n, massiv_min, massiv_max, count;
FILE *f_mass;
printf("\nЛабораторная работа №8_2");
printf("\nВариант №0");
printf("\nПО-11-1");
printf("\nПупкин Василий\n");
printf("\nВведите нижнюю границу диапазона:");
scanf("%d", &massiv_min);
printf("\nВведите верхнюю границу диапазона:");
scanf("%d", &massiv_max);
printf("\nВведите размер массива:");
scanf("%d", &n);
int massiv[n][n];
printf("\nИсходный массив:\n");
vorm_mass(n, massiv_max, massiv_min, massiv);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
printf("%5d", massiv[i][j]);
printf("\n");
}
printf("\n");
f_mass = fopen("E:/User/f_mass.txt", "w"); //открытие файла для записи
for (i=0; i<n; i++) //запись массива в файл построчно
{
for (j=0; j<n; j++)
fprintf(f_mass, "%5d", massiv[i][j]);
fprintf(f_mass, "\n");
}
fclose(f_mass); //закрытие файла после записи
f_mass = fopen("E:/User/f_mass.txt", "r"); //открытие файла для чтения
count = 0; //количество прочитанных чисел
while (!feof(f_mass)) //пока не конец файла f_mass
{
i = fscanf(f_mass, "%d", &n);
count++;
}
printf("\nВ файле записано %d чисел\n", count);
count = sqrt(count); //определение размера записанного в файле массива
f_mass = fopen("E:/User/f_mass.txt", "r");
printf("\nПрочитанный из файла массив:\n");
for (i=0; i<count; i++) //чтение массива из файла и вывод его на экран построчно
{
for (j=0; j<count; j++)
{
fscanf(f_mass, "%5d", &n);
printf("%5d", n);
}
printf("\n");
}
printf("\n");
f_mass = fopen("E:/User/f_mass.txt", "r");
printf("\nГлавная диагональ массива:\n");
for (i=0; i<count; i++) //чтение массива из файла и вывод на экран его главной диагонали
for (j=0; j<count; j++)
{
fscanf(f_mass, "%5d", &n);
if (i == j)
printf("%5d", n);
}
printf("\n\n");
f_mass = fopen("E:/User/f_mass.txt", "r");
printf("\nПобочная диагональ массива:\n");
for (i=0; i<count; i++) //чтение массива из файла и вывод на экран его побочной диагонали
for (j=0; j<count; j++)
{
fscanf(f_mass, "%5d", &n);
if (j == count-i-1)
printf("%5d", n);
}
printf("\n\n");
fclose(f_mass); //закрытие файла
return 0;
}
//описание функции формирования квадратного массива
void vorm_mass(int nn, int mass_max, int mass_min, int mass[nn][nn])
{
int i, j, m;
time_t t; // текущее время для инициализации
// генератора случайных чисел
srand((unsigned) time(&t)); // инициализация генератора
// случайных чисел
m = mass_max-mass_min + 1;
// получение случайного числа в диапазоне
// от vector_min до vector_max
for (i=0; i<nn; i++)
for (j=0; j<nn; j++)
mass[i][j]=rand()% m + mass_min;
}
4. Компиляция, отладка, тестирование и получение результата:
5. Структура файла f.txt:
-9 -9 2 -6 2
1 9 -10 7 -9
3 0 -3 3 6
2 8 -6 -10 9
-9 7 2 -1 -4
Задания на лабораторную работу №8
Размеры создаваемых файлов считать заранее неизвестными и определять их при чтении файлов. При чтении из файла массивы не использовать. Можно использовать рабочие файлы.
Вариант 1
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить минимальное и максимальное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Удалить из файла все числа, находящиеся между минимальным и максимальным.
Задание 2
Создать текстовый файл, в который построчно записать квадратный массив massivnn, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размер массива n задать константой. Границы диапазона v_min и v_max задать с консоли. Прочитать из созданного файла k-ю строку и k-й столбец и вывести их на экран. Значение k задать с консоли. При чтении из файла считать размер массива неизвестным. Определить его при чтении файла.
Вариант 2
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить минимальное и максимальное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Оставить в файле только числа, находящиеся между минимальным и максимальным.
Задание 2
Создать текстовый файл, в который построчно записать квадратный массив massivnn, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размер массива n задать константой. Границы диапазона v_min и v_max задать с консоли. Прочитать из созданного файла все диагонали, параллельные главной, и вывести их на экран построчно. При чтении из файла считать размер массива неизвестным. Определить его при чтении файла.
Вариант 3
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить вторые по значению минимальное и максимальное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Оставить в файле только числа, находящиеся между ними.
Задание 2
Создать текстовый файл, в который построчно записать квадратный массив massivnn, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размер массива n задать константой. Границы диапазона v_min и v_max задать с консоли. Прочитать из созданного файла все диагонали, параллельные побочной, и вывести их на экран построчно. При чтении из файла считать размер массива неизвестным. Определить его при чтении файла.
Вариант 4
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить вторые по значению минимальное и максимальное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Удалить из файла все числа, находящиеся между ними.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Прочитать из созданного файла r-ю строку и p-й столбец и вывести их на экран. Значения r и p задать с консоли. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 5
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить первое по порядку четное и последнее нечетное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Удалить из файла все числа, находящиеся между ними.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Вывести на экран строку с максимальным элементом и столбец с минимальным элементом файла. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 6
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить первое по порядку нечетное и последнее четное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Удалить из файла все числа, находящиеся между ними.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Вывести на экран строку с минимальным элементом и столбец с максимальным элементом файла. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 7
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить первое по порядку положительное и последнее отрицательное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Оставить в файле только числа, находящиеся между ними.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Вывести на экран строку с максимальной суммой элементов и столбец с минимальной суммой элементов. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 8
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить первое по порядку отрицательное и последнее положительное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Оставить в файле только числа, находящиеся между ними.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Вывести на экран строку с минимальной суммой элементов и столбец с максимальной суммой элементов. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 9
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить первое по порядку положительное и последнее отрицательное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Удалить из файла все числа, находящиеся между ними.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Определить максимальный и минимальный элементы в файле и поменять их местами. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 10
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Определить первое по порядку отрицательное и последнее положительное числа и их позиции в файле (нумерация данных в файле начинается с нуля). Предусмотреть случай, когда таких чисел в файле нет. Удалить из файла все числа, находящиеся между ними.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Определить второй максимальный и второй минимальный элементы в файле и поменять их местами. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 11
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Отсортировать файл по возрастанию.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Обнулить все элементы файла, находящиеся между его максимальным и минимальным элементами. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 12
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Отсортировать файл по убыванию.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Определить первый четный и последний нечетный элементы в файле и поменять их местами. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 13
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Перевернуть элементы файла – сделать “поплавок”.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Определить первый положительный и последний отрицательный элементы в файле и поменять их местами. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 14
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Удалить из файла его максимальный и минимальный элементы.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Определить первый нечетный и последний четный элементы в файле и поменять их местами. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Вариант 15
Задание 1
Создать типизированный файл целых чисел. Записать в него с консоли последовательность целых чисел, конец последовательности (терминатор) – ноль, который не записывается в файл. Удалить из файла вторые по величине максимальный и минимальный элементы.
Задание 2
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размеры массива n и m задать константами. Границы диапазона v_min и v_max задать с консоли. Определить первый отрицательный и последний положительный элементы в файле и поменять их местами. При чтении из файла считать размеры массива неизвестными. Определить их при чтении файла.
Лабораторная работа № 9
Рекурсия
Тема: Программирование рекурсивных алгоритмов.
Цель работы: Освоить методику программирования рекурсивных алгоритмов. Освоить методику тестирования программ.
Задание на лабораторную работу
- Получить задание в соответствии с номером своего варианта.
- Составить схему алгоритма решения задачи.
- Написать код программы на языке Паскаль в среде Borland Pascal for Windows.
- Осуществить компиляцию, и отладку программы. Провести структурное тестирование программы (тестирование как белого ящика): составить тестовые наборы для тестирования
- в нормальных условиях,
- при граничных условиях,
- при некорректных входных данных,
- по критерию покрытия решений – результат проверки каждого условия принимал значение истина или ложь хотя бы один раз,
- по критерию покрытия условий – все возможные результаты каждой логической операции в условиях были получены хотя бы по одному разу.
- Получить результат.
- Оформить отчет по лабораторной работе.
Пример оформления работы
Задание 1.
Написать рекурсивную функцию, вычисляющую факториал заданного целого положительного числа n.
1. Для вычисления n! можно воспользоваться следующими соотношениями:
1! = 1
2! = 1•2 = 2•1!
3! = 1•2•3 = 3•2!
. . .
n! = n•(n-1)!
2. Схема алгоритма решения задачи:
3. Код программы
3.1. На языке Паскаль:
Program Variant_0;
Uses WinCrt;
Var n: Word;
fact: LongInt;
Function Factorial(k:Word):LongInt;
Begin
If (k=1) Or (k=0)
Then Factorial:=1 {терминальная ветвь}
Else Factorial:=k*Factorial(k-1); {рекурсивная ветвь}
End; {Factorial}
Begin {головная программа}
WriteLn('Лабораторная работа №9_1');
WriteLn('Вариант №0');
WriteLn('ИС-11-1');
WriteLn('Пупкин Василий');
WriteLn;
Write('n=');
ReadLn(n);
fact:=Factorial(n);
WriteLn('factorial=', fact);
End.
3.2. На языке Си:
#include <stdio.h>
#include <conio.h>
#include <math.h>
// прототип функции
unsigned long factorial(unsigned int n);
Int main()
{
unsigned int k;
unsigned long fact;
printf("\nЛабораторная работа №9_1");
printf("\nВариант №0");
printf("\nПО-11-1");
printf("\nПупкин Василий\n");
printf("\nВведите натуральное число:");
scanf("%d", &k);
fact = factorial(k);
printf("\nФакториал числа %d равен %d\n", k, fact);
return 0;
}
//описание функции