Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 34
1

Создать текстовый файл, в который построчно записать квадратный массив

10.01.2013, 08:28. Показов 2931. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создать текстовый файл, в который построчно записать квадратный массив massivnn, заполненный целыми случайными числами в диапазоне от v_min до v_max. Размер массива n задать константой. Границы диапазона v_min и v_max задать с консоли. Прочитать из созданного файла все диагонали, параллельные главной, и вывести их на экран построчно. При чтении из файла считать размер массива неизвестным. Определить его при чтении файла.
СРОЧНООООООО!!!!!!!!!!!!!!!!!!!!!!!!!!!!

надо чтобы в конце программы диагонали считались не из массива , а напрямую из файла , без использования массивов
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Uses CRT;
Const n=5;
Var i, j, v_min, v_max, row, col, count, temp, k: Integer;
    a: Array [1..n, 1..n] of Integer;
    f: Text;
Begin
  ClrScr;
  Randomize;
  WriteLn ('Vvedite diapazon sluchainix chisel');
  Write ('v_min=');
  ReadLn (v_min);
  Write ('v_max=');
  ReadLn (v_max);
  Assign (f, 'C:\f.txt');
  ReWrite (f);
  For i:= 1 to n do
    Begin
      For j:= 1 to n do
        Begin
          a[i,j]:= Random (v_max - v_min + 1) + v_min;
          Write (f, a[i,j]:5);
        End;
      WriteLn;
    End;
  WriteLn;
  Close (f);
  ReSet (f);
  count:= 0;
  While (Not (EOF (f))) Do
    Begin
      Read (f, temp);
      count:= count + 1;
    End;
  ReSet (f);
  col:= 0;
  While (Not (EOLn (f))) Do
    Begin
      Read (f, temp);
      col:= col + 1;
    End;
  row:= count div col;
  WriteLn;
  WriteLn ('strok=', row, '   stolbcov=', col);
  WriteLn;
  WriteLn ('Prochitaanii massiv:');
  ReSet (f);
  For i:= 1 To row Do
    Begin
      For j:= 1 To col Do
        Begin
          Read (f, temp);
          Write (temp:5);
        End;
      WriteLn;
    End;
  Close (f);
  WriteLn;
  Write ('Diagonali, parallelnie glavnoy:');
  Append (f);
  WriteLn;
  For i:= row Downto 1 Do
    Begin
      k:= 1;
      For j:= i To col Do
        Begin
          Write (f, a[k,j]:5);
          Write (a[k,j]:5);
          k:= k + 1;
        End;
      Writeln;
    End;
  For i:= 2 To row Do
    Begin
      k:= 1;
      For j:= i To col Do
        Begin
          Write (f, a[j,k]:5);
          Write (a[k,j]:5);
          k:= k + 1;
        End;
      WriteLn;
    End;
  Close (f);
  WriteLn ('Press ESC to EXIT');
  ReadLn;
End.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2013, 08:28
Ответы с готовыми решениями:

Создать текстовый файл, в который построчно записать квадратный массив
Размеры создаваемых файлов считать заранее неизвестными и определять их при чтении файлов. При...

Создать текстовый файл, в который построчно записать прямоугольный массив
Создать текстовый файл, в который построчно записать прямоугольный массив mas-sivnm, заполненный...

Создать текстовый файл, в который построчно записать прямоугольный массив
Размер создаваемого файла считать заранее неизвестным и определять его при чтении файла. При...

Создать текстовый файл, в который построчно записать прямоугольный массив, заполненный целыми случайными числами
Создать текстовый файл, в который построчно записать прямоугольный массив massivnm, заполненный...

3
181 / 179 / 23
Регистрация: 29.08.2012
Сообщений: 489
10.01.2013, 10:10 2
Перво-наперво проверил какой файл формируется - там не квадратная матрица, а всё в одну строку.
Судя по строке 24 задумано было не так. Чтобы перевод строки писался в файл нужен оператор writeln(f).
Остальная часть программы тоже должна это учитывать и уметь брать нужный элемент из нужной строки.
0
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 34
10.01.2013, 10:23  [ТС] 3
вот эту надо переделать
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
uses crt;
Var
 MassivNN,a:Array[1..5,1..5] of Integer;
 v_min,v_max,Dummy:Integer;
 i,j,k,N:byte;
 f:Text;
 
Begin
 Assign(f,'f.txt');
 Rewrite(f);
 Randomize;
 Write('v_min= ');
 Readln(v_min);
 Write('v_max= ');
 Readln(v_max);
 for i:=1 to 5 do
  begin
   for j:=1 to 5 do
    begin
     MassivNN[i,j]:=v_min+Random(v_max-v_min);
     write(MassivNN[i,j]:4);
     write(f,MassivNN[i,j]:4);
    end;
   writeln;
   writeln(f);
  end;
 Close(f);
 Writeln;
 Reset(f);
 N:=0;
 Repeat
  read(f,Dummy);
  Inc(N);
 Until EoLn(f);
 Reset(f);
 For i:=1 to N do
  For j:=1 to N do
   read(f,a[i,j]);
 Close(f);
 for j:=1 to N do
  begin
   for i:=1 to j do write(a[i,j-i+1]:4);
   writeln;
  end;
 for i:=2 to N do
  begin
   for j:=N downto i do write(a[N-j+i,j]:4);
   writeln;
  end;
 Readln
End.
0
181 / 179 / 23
Регистрация: 29.08.2012
Сообщений: 489
10.01.2013, 16:00 4
Суть задания заключается в следующем (с момента как сформирован файл):

Существует входной файл, о котором известно только то, что он текстовый и в нём записан квадратный массив чисел(количество элементов строк и столбцов совпадает). Элементы в нём разбиты на строки и столбцы. Строки отделены друг от друга символами перевод строки+возврат каретки, в последней строке присутствуют эти коды в единичном экземпляре.

Необходимо чтением данных из файла определить количество строк и столбцов. Если их количество совпадает, то отработать дальнейший алгоритм, в противном случае выдать сообщение о некорректности данных в файле.
Поскольку размер массива неизвестен, а также ввиду того, что в задании указано работать напрямую с данными из файла, без дополнительных массивов, то аглоритм должен уметь обращаться к произвольному элементу с заданным номером строки и столбца.

Последний твой код выводит не диагонали, параллельные главное, а что-то иное.

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

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  while not eof(f) Do
  begin
    while not eoln(f) Do
    begin
      Read(f, temp);
      write(temp, ' ');
      clmns := clmns + 1;
    end;
    write(' -> ', clmns);
    clmns := 0;
    rows := rows + 1;
    readln(f);
    writeln;
  end;
Здесь читаются и считаются элементы покуда не дойдём до окончания строки. Если строка кончилась, то увеличиваем счётчик строк и переводим чтение на следующую строку (readln(f)) и читаем её, если не достигнут конец файла. В этом фрагменте количество элементов каждой строки считается, выводится и обнуляется - это для теста. Если угодно, можно это число, куда-то сохранить для дальнейшего использования.

Главная часть программы должна уметь то, что обозначено выше в задании - читать заданные элемент массива.
Это достигается использованием верной комбинации считываний элементов строк read(f, ***) и переводов каретки readln(f). Когда эта часть алгоритма будет работать останется добиться чтобы индексы массива перебирались так, чтобы выбирались элементы массива, параллельные главной диагонали.
Пока это всё.

Добавлено через 2 часа 51 минуту
Собственно цикл который позволяет обращаться с элементам, расположенным параллельно главной диагонали:
Pascal
1
2
3
4
5
for k := 1 to n - 1 do
  for i := 1 to n - k do
    writeln(a[i, i + k], ' ', a[i + k, i])
// a[i, i + k] - диагонали с одной стороны от главной диагонали
// a[i + k, i] - диагонали с другой стороны от главной
Добавлено через 48 минут
Оформил в виде функции часть которая отвечает за поиск и считывание из файла элемента с заданным номером строки и столбца:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
function Rd_Cell(ii, jj: byte): byte;
var
  kk, tmp: byte;
begin
  Reset(f);
  for kk := 1 to ii - 1 do // Допрыгиваем до нужной строки с номером ii
    readln(f);
  for kk := 1 to jj do
    read(f, tmp); // Считываем элементы строки до нужного номера jj
  Rd_Cell := tmp;
  Close(f)
end;
Тогда кусок кода для обращения к диагоналям, параллельным главной будет выглядеть так:
Pascal
1
2
3
for k := 1 to n - 1 do
  for i := 1 to n - k do
    writeln(Rd_Cell(i, i + k), ' ', Rd_Cell(i + k, i));
По сути, остаётся сшить всё в одну программу...
2
10.01.2013, 16:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2013, 16:00
Помогаю со студенческими работами здесь

Записать массив в текстовый файл построчно
Здравствуйте! Помогите пожалуйста с заданием, нужно объявить массив и записать его в текстовый файл...

Как данные, посылаемые построчно из Arduino по СОМ-порту, записать построчно в текстовый файл?
Программирование для меня - неосновная область работы. Поэтому ищу готовые решения. И меня крепко...

Создать текстовый файл , в который записать 3 предложения
Создать текстовый файл , в который записать 3 предложения. Дуже корисно вчити всім студентам...

Создать текстовый файл, в который записать 3 предложения
Создать текстовый файл, в который записать 3 предложения. 1. Очень полезно учить 2. Язык Паскаль...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru