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");
}