Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 02.04.2010
Сообщений: 11

Разреженная вещественная матрица

17.04.2010, 12:46. Показов 2215. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разреженная вещественная матрица записана по строкам в текстовом файле. Компонента файла - это запись, содержащая ненулевой элемент матрицы: два индекса и значение элемента. В первой компоненте вместо индексов записаны размеры матрицы (количество строк и столбцов). Сформировать типизораванный файл, в первой строке которого записать размеры матрицы, а в остальных - все ее элементы, как нулевые, так и ненулевые. При записи чисел использовать формат 8:2. Элементы матрицы разделять в строке файла одним пробелом. Каждую строку матрицы начинать с новой строки файла.
Длина строки текстового файла не должна превышать 80 символов. Если в одной строке файла не размещаются все элементы строки матрицы, запись их продолжать на следующей строке файла.
Матрицу, читаемую из типизированного файла, не формировать в оперативной памяти.

Помогите пожалуйста, а то вообще не поминаю что тут нужно сделать
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.04.2010, 12:46
Ответы с готовыми решениями:

Разреженная матрица - исправить код
помогите не работает не понимаю почему модуль Unit Uno; interface Type TList=^Lst; Lst=Record r,s:Integer;...

вещественная матрица
Дана вещественная матрица "А" размерностью n*m. Определить "К" - коичество "особых" элементов массива "А", считая его...

Вещественная матрица
Нужен код программы. Мне защищаться в понедельник, а решить никак не могу. Если не сложно, напишите, пожалуйста. Дана вещественная...

5
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
17.04.2010, 13:24
Задание сформулировано очень туманно. Надо уточнить его.
Цитата Сообщение от kinder_boy Посмотреть сообщение
Сформировать типизораванный файл, в первой строке которого записать размеры матрицы, а в остальных - все ее элементы
В типизированном файле нет строк. Типизированный файл надо воспринимать как массив неких записей, расположенный на диске.
Далее сказано:
Цитата Сообщение от kinder_boy Посмотреть сообщение
При записи чисел использовать формат 8:2. Элементы матрицы разделять в строке файла одним пробелом. Каждую строку матрицы начинать с новой строки файла.
Здесь явно говорится о текстовом, а не о типизированном файле. Это противоречит вышестоящему утверждению, что данные надо записывать в типизированный файл.
Цитата Сообщение от kinder_boy Посмотреть сообщение
Длина строки текстового файла не должна превышать 80 символов. Если в одной строке файла не размещаются все элементы строки матрицы, запись их продолжать на следующей строке файла.
В таком случае как выделить отдельную строку таблицы? Для этого надо придумать маркер конца записи строки таблицы в файле. Так?
Цитата Сообщение от kinder_boy Посмотреть сообщение
Матрицу, читаемую из типизированного файла, не формировать в оперативной памяти.
Так, значит, потом надо матрицу прочитать из типизированного файла? А зачем? Надо показать её ненулевые элементы на экране? Или ещё что-то сделать?
0
0 / 0 / 0
Регистрация: 02.04.2010
Сообщений: 11
17.04.2010, 14:28  [ТС]
Просто задание само по себе непонятное. Вот оно полностью:

9.Разреженная вещественная матрица записана по строкам в типизированном файле. Компонента файла - это запись, содержащая ненулевой элемент матрицы: два индекса и значение элемента. В первой компоненте вместо индексов записаны размеры матрицы (количество строк и столбцов). Сформировать текстовый файл, в первой строке которого записать размеры матрицы, а в остальных - все ее элементы, как нулевые, так и ненулевые. При записи чисел использовать формат 8:2. Элементы матрицы разделять в строке файла одним пробелом. Каждую строку матрицы начинать с новой строки файла.
Длина строки текстового файла не должна превышать 80 символов. Если в одной строке файла не размещаются все элементы строки матрицы, запись их продолжать на следующей строке файла.
Матрицу, читаемую из типизированного файла, не формировать в оперативной памяти.

10. То же, но из текстового файла (в нем полная матрица) в типизированный.

мне нужно сделать 10.
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
17.04.2010, 19:06
Сделал в таком варианте. Создаётся исходный текстовый файл со сведениями о разреженной матрице. Затем, данные читаются из этого файла и записываются в типизированный файл. Для того чтобы показать, что типизированный файл содержит правильные данные, создаётся ещё один тектовый файл - проверочный. И данные из типизированного файла переписываются в этот проверочный файл. Далее можно открыть самостоятельно входной и проверочный файлы и сравнить данные в них. В проверочном файле для удобства нет пустых строк.
Код может показаться заковыристым, поэтому добавил побольше комментариев.
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
program Project1;
 
const
  (*Имя файла с исходными данными.*)
  SrcFN = 'data_src.txt';
  (*Имя файла с результирующими данными.*)
  TrgFN = 'data_trg.txt';
  (*Имя файла с проверочными данными.*)
  TestFN = 'data_test.txt';
 
  //Размерность разреженной матрицы.
  //Количество строк.
  M = 100;
  //Количество столбцов.
  N = 1000;
 
type
  (*Тип, задающий сведения о ненулевом элементе разреженной матрицы.*)
  TElem = record
    (*Координаты элемента матрицы: индекс строки и столбца.*)
    i, j : Integer;
    (*Значение элемента матрицы.*)
    Value : Extended;
  end;
 
(*Создание разреженной матрицы и запись её в файл.*)
procedure CreateMatrix;
var
  (*Файловая переменная.*)
  F : Text;
  (*Индексы строки с столбца в разреженной матрице.*)
  i, j : Integer;
  (*Счётчик ненулевых элементов в строке матрицы.*)
  Cnt : Integer;
  (*Значение элемента разреженной матрицы.*)
  Value : Extended;
begin
  (*Связываем файловую переменную с именем файла.*)
  Assign(F, SrcFN);
  (*Создаём/пересоздаём файл и открываем его в режиме "только запись".*)
  Rewrite(F);
  (*Запись сведений о размерах матрицы.*)
  Write(F, N, ' ', M);
  (*Запись знака конца строки: #13#10.*)
  Writeln(F);
  (*Запись сведений о ненулевых элементах матрицы.*)
  Randomize;
  for i := 1 to M do begin
    (*Пускай вероятность того, что в строке есть хотябы один элемент, равна 1/10*)
    if Random(10) <> 0 then begin
      (*Запись знака конца строки: #13#10.*)
      Writeln(F);
      (*Пропуск итерации цикла.*)
      Continue;
    end;
    Cnt := 0;
    for j := 1 to M do begin
      (*Пускай вероятность того, что в данной строке в столбце j имеется ненулевой
      элемент, равна 1/200*)
      if Random(50) <> 0 then Continue;
      Inc(Cnt);
      Value := Random(1000) * Random(100) + 1 / (1 + Random(100)); (* [0..(10e5 - 1)] + [(0.01..1)] = 0.01..10e5.00 *)
 
      (*Длина записи по одному компоненту равна: 4 + 1 + 4 + 1 + 8 + 1 = 19-и символам.
      Поэтому, чтобы соблюсти правило, по которому каждая строка файла не должна
      превышать 80 символов, нам следует в каждую строку записывать не более
      80 div 19 = 4-ёх элементов.*)
      if Cnt < 4 then begin
        (*Между элементами в строке файла ставим пробелы.*)
        Write(F, ' ');
      end else if Cnt > 4 then begin
        Writeln(F);
        (*Т. к. в новую строку файла теперь записан 1 элемент, переустанавливаем счётчик.*)
        Cnt := 1;
      end;
      Write(F, i:4, ' ', j:4, ' ', Value:8:2);
    end;
    Writeln(F);
  end;
  (*Закрываем файл.*)
  Close(F);
end;
 
(*Чтение данных о разряженной матрице из текстового файла и запись
полученных данных в типизированный файл.*)
procedure MoveMatrix;
var
  FSrc : Text;
  FTrg : File of TElem;
  Elem : TElem;
begin
  (*Открываем входной файл для чтения данных.*)
  Assign(FSrc, SrcFN);
  Reset(FSrc);
  (*Создаём/пересоздаём целевой файл и открываем его в режиме "только запись".*)
  Assign(FTrg, TrgFN);
  Rewrite(FTrg);
 
  (*Переписываем сведения о размерах матрицы.*)
  if not Eof(FSrc) then begin
    Readln(FSrc, Elem.i, Elem.j);
    Elem.Value := 0;
    Write(FTrg, Elem);
  end;
 
  while not Eof(FSrc) do begin
    (*Пропускаем знаки перевода строк #13#10.*)
    while Eoln(FSrc) and (not Eof(FSrc)) do begin
      Readln(FSrc);
    end;
    (*Если после пропусков достигнут конец файла - выходим из цикла.*)
    if Eof(FSrc) then Break;
 
    (*Читаем очередной ненулевой элемент матрицы из исходного текстового файла.*)
    Read(FSrc, Elem.i, Elem.j, Elem.Value);
    (*Записываем очередной прочитанный элемент матрицы в целевой типизированный файл.*)
    Write(FTrg, Elem);
  end;
 
  (*Закрываем файлы.*)
  Close(FSrc);
  Close(FTrg);
end;
 
(*Выполняем проверку: на основе данных в целевом типизированном файле
создаём копию исходного текстового файла.*)
procedure TestData;
var
  FTrg : File of TElem;
  FTest : Text;
  i : Integer;
  Elem : TElem;
begin
  Assign(FTrg, TrgFN);
  Reset(FTrg);
  Assign(FTest, TestFN);
  Rewrite(FTest);
 
  (*Читаем сведения о размерах матрицы и записываем их в проверочный файл.*)
  if not Eof(FTrg) then begin
    Read(FTrg, Elem);
    Write(FTest, Elem.i, ' ', Elem.j);
  end;
 
  (*Читаем сведения о ненулевых элементах матрицы и записываем сведения о
  них в проверочный файл.*)
  i := 0;
  while not Eof(FTrg) do begin
    (*Читаем сведения об очередном ненулевом элементе из целевого файла.*)
    Read(FTrg, Elem);
    (*Если номер строки матрицы, в которой расположен текущий прочитанный элемент отличается
    от номера строки, в которой расположен предыдущий элемент,
    то вставляем разделитель строк.*)
    if i <> Elem.i then begin
      i := Elem.i;
      Writeln(FTest);
      Writeln(FTest, '--------------------------------------------------');
    end;
    Write(FTest, Elem.i:4, ' ', Elem.j:4, ' ', Elem.Value:8:2, ' ');
  end;
 
  (*Закрываем файлы.*)
  Close(FTrg);
  Close(FTest);
end;
 
begin
  (*Формируем разреженную матрицу и записываем её в текстовый файл.
  Этот текстовый файл считаем исходным файлом.*)
  CreateMatrix;
  (*Читаем ненулевые элементы матрицы из исходного текстового файла
  и записываем их в целевой типизированный файл.*)
  MoveMatrix;
  (*Выполняем проверку: на основе данных в целевом типизированном файле
  создаём проверочный текстовый файл.*)
  TestData;
 
  Writeln('Задача выполнена.');
  Writeln('Исходный текстовый файл: ', SrcFN);
  Writeln('Целевой типизированный файл: ', TrgFN);
  Writeln('Проверочный текстовый файл: ', TestFN);
 
  Readln;
end.
1
0 / 0 / 0
Регистрация: 02.04.2010
Сообщений: 11
18.04.2010, 11:22  [ТС]
Спасибо огромное!!!

Добавлено через 1 час 27 минут
Извените, но в этой строке выдает 116 ошибку: must be in 8087 mod to compile this
Pascal
1
Value := Random(1000) * Random(100) + 1 / (1 + Random(100));
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
18.04.2010, 16:49
В Pascal надо открыть опции компилятора: Главное меню - Options - Compiler... - там в разделе "Numeric processing" поставить галочку в строке: "8087/80287".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.04.2010, 16:49
Помогаю со студенческими работами здесь

вещественная матрица
Дана вещественная матрица A( m,n ). Составьте программу для подсчета количество &quot;особых&quot; элементов массива A, считая его элемент...

Вещественная матрица.
помогите решить на паскале Пусть дана (построчно) вещественная матрица размером 7х4. Переставляя ее строки и столбцы, добейтесь того,...

Задана вещественная матрица...
Задана вещественная матрица A размера 4Х4. Пусть B - множество элементов, для которых j&gt;=i. На этом множестве найти и вывести на...

Массивы. Вещественная матрица
Дана вещественная матрица A(n,m); где n&lt;10, m&lt;10. Разработайте программу, что удаляет все строки, содержащие только четные элементы....

Пусть дана вещественная квадратная матрица порядка 12
Помогите можалуйста очень нужна ваша помощь!!!! Составить программу для вычисления суммы: S=sin(x) +sin^2(x) +sin^3(x)+sin^n(x) ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru