Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2009, 20:43   #1
Ddr
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 19
По умолчанию помогите с решением задачи(Delphi)

Дан файл f, компонентами которого являются действительные матрицы 4*6. Преобразовать каждую из матриц, разделив её элемент на сумму единицы и модуля наибольшего значения элементов матрицы. Полученные матрицы записать в файл g.

Заранее спасибо.
Ddr вне форума Ответить с цитированием
Старый 10.04.2009, 21:37   #2
Ddr
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 19
По умолчанию

Интересует в основном как прочитать несколько матриц, так чтобы можно было работать с ними по отдельности...
Ddr вне форума Ответить с цитированием
Старый 11.04.2009, 01:55   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Интересует в основном как прочитать несколько матриц, так чтобы можно было работать с ними по отдельности...
Все просто. В задании сказано:
Цитата:
Дан файл f, компонентами которого являются действительные матрицы 4*6
Это значит, что имеем дело с типизированным файлом.

Объявляем тип матрица:
Код:
const M=4; N=6;
type matrix = array[1..M,1..N] of integer;
И типизированный файл из матриц:
Код:
f : file of matrix;
------------------------
Вот пример.
Создается файл "test.dat". В него записываются 5 матриц (генерятся случайно). Файл закрывается.
Потом файл открывается для чтения и оттуда читаются эти матрицы.

Код:
uses crt;
const M=4; N=6;
type matrix = array[1..M,1..N] of integer;

var
a : matrix;
f : file of matrix;
i,j,k : integer;

begin
clrscr;
randomize;
assign(f,'test.dat');
rewrite(f);
for k:=1 to 5 do
 begin
 for i:=1 to M do
  for j:=1 to N do
   a[i,j] := random(20);
 write(f,a);
 end;
close(f);
{-----------}

reset(f);
for k:=1 to 5 do
 begin
 read(f,a);
 for i:=1 to M do
  begin
  for j:=1 to N do
   write(a[i,j]:4);
  writeln;
  end;

 end;
close(f);
readln;
end.
------------------
Можно также объявить массив матриц (чтобы сразу считать все содержимое файла).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.04.2009, 13:25   #4
Ddr
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 19
По умолчанию

Спасибо большое

Последний раз редактировалось Ddr; 11.04.2009 в 13:48.
Ddr вне форума Ответить с цитированием
Старый 11.04.2009, 13:49   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Спасибо, но как реализовать на делфи?
Вместо Assign - AssignFile.
А остальное также (работа с файлами).
Если есть конкретные вопросы - задавайте. А если вам нужен просто готовый код, то я его писать не буду.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.04.2009, 14:53   #6
Ddr
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 19
По умолчанию

формирование матриц
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
randomize;
assignfile(f,'mtrx.dat');
rewrite(f);
for k:=1 to 4 do
 begin
 for i:=1 to M do
  for j:=1 to N do
   a[i,j] := random(20);
 write(f,a);
 end;
closefile(f);
end;
Ну тут решение вроде как... на скорую руку
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  assignfile(g,'result.dat');
  rewrite(g);
  for k:=1 to 4 do
   begin
    read(f,a);
    max:=a[1,1];
    for i:=1 to M do begin
     for j:=1 to N do  begin
       if a[i,j] > max then max:=a[i,j];
       a[i,j]:=a[i,j]/(1+abs(max));
      end;
    end;
    write(g,a);
   end;
closefile(g);
end;
end.
и появляется ошибка вот в этом
Код:
read(f,a)
I/O error 103.
Да кстати, матрицы как-то странно заполняются в виде таких символов
Код:
    @      *@      "@      *@      @      2@      2@
Ddr вне форума Ответить с цитированием
Старый 11.04.2009, 14:58   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
и появляется ошибка вот в этом
А вы посмотрите внимательно на свой код. У вас файл не открыт.
Об этом вам и говорит компилятор.
Цитата:
Да кстати, матрицы как-то странно заполняются в виде таких символов
Это вы в текстовом редакторе что-ди его посмотреть пытаетесь? Так а что вы ожидали увидеть? Файл-то не текстовый.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.04.2009, 15:18   #8
Ddr
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 19
По умолчанию

Код:
assignfile(f,'mtrx.dat');
   reset(f);
Добавил это, ошибка пропала. Щас попробую вывести все матрицы посмотреть что будет в результате
Ddr вне форума Ответить с цитированием
Старый 11.04.2009, 15:33   #9
Ddr
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 19
По умолчанию

Всё работает, большое спасибо.
Ddr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с решением задачи Ga-sergey Помощь студентам 4 11.03.2007 11:13
Помогите с решением задачи!Please! Инзия Помощь студентам 3 11.03.2007 07:50