Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы - Паскаль, Си, Java, PHP.doc
Скачиваний:
65
Добавлен:
04.06.2015
Размер:
5.29 Mб
Скачать

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

  1. Код программы

    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.

    1. На языке Си:

#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;

}

  1. Компиляция, отладка, тестирование и получение результата:

  1. Структура файла 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