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. Компиляция, отладка, тестирование и получение результата:

Return 0; //завершение работы программы - student2.ru

Return 0; //завершение работы программы - student2.ru

Задание 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. Схема алгоритма решения задачи:

Return 0; //завершение работы программы - student2.ru Return 0; //завершение работы программы - student2.ru

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. Компиляция, отладка, тестирование и получение результата:

Return 0; //завершение работы программы - student2.ru

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

Рекурсия

Тема: Программирование рекурсивных алгоритмов.

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

Задание на лабораторную работу

  1. Получить задание в соответствии с номером своего варианта.
  2. Составить схему алгоритма решения задачи.
  3. Написать код программы на языке Паскаль в среде Borland Pascal for Windows.
  4. Осуществить компиляцию, и отладку программы. Провести структурное тестирование программы (тестирование как белого ящика): составить тестовые наборы для тестирования

- в нормальных условиях,

- при граничных условиях,

- при некорректных входных данных,

- по критерию покрытия решений – результат проверки каждого условия принимал значение истина или ложь хотя бы один раз,

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

  1. Получить результат.
  2. Оформить отчет по лабораторной работе.

Пример оформления работы

Задание 1.

Написать рекурсивную функцию, вычисляющую факториал заданного целого положительного числа n.

1. Для вычисления n! можно воспользоваться следующими соотношениями:

1! = 1

2! = 1•2 = 2•1!

3! = 1•2•3 = 3•2!

. . .

n! = n•(n-1)!

2. Схема алгоритма решения задачи:

Return 0; //завершение работы программы - student2.ru

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;

}

//описание функции

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