IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Работа с матрицами и файлами, Помогите написать две программы.
Iren
сообщение 27.11.2005 10:06
Сообщение #1


Гость






Надо к завтрашнему дню сдать две задачи (крайний срок), сама виновата, дотянула донельзя.
Очень прошу, помогите решить:
1.
Описать функцию sum(A, S1, S2), вычисляющую сумму тех элементов матрицы А, номера строк и столбцов которых принадлежат соответственно непустым множествам S1 и S2 типа ном.
const n=10; type номер=1..n; матрица=array [номер, номер] of real; ном = set of номер
2.
В данном файле целых чисел с элементами A1, A2, …, AN (N — количество элементов в файле). Заменить исходное расположение его элементов на следующее: A1, AN, A2, AN–1, A3, … .

Очень прошу помогите...
 К началу страницы 
+ Ответить 
2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
volvo
сообщение 27.11.2005 10:46
Сообщение #2


Гость






Насчет первой - все просто:
const
size = 10;
type
number = 1 .. size;
matrix = array[number, number] of integer;

byteset = set of number;

function sum(var a: matrix; s1, s2: byteset): integer;
var
i, j, s: integer;
begin
s := 0;
for i := 1 to size do
for j := 1 to size do
if (i in s1) and (j in s2) then s := s + a[i, j];
sum := s;
end;

var
arr: matrix;
i, j: number;

begin
for i := 1 to size do
for j := 1 to size do
arr[i, j] := random(20);

for i := 1 to size do begin
for j := 1 to size do
write(arr[i, j]:4);
writeln;
end;

writeln('sum = ', sum(arr, [1, 3], [2]));
end.
 К началу страницы 
+ Ответить 
volvo
сообщение 27.11.2005 10:47
Сообщение #3


Гость






Вторая (предполагая, что файл F: File Of Integer уже имеется на диске):
var
arr: array[1 .. 100] of integer;

var
i, n: integer;
f: file of integer;

begin
assign(f, 'f_in.dat');
reset(f); n := 0;
while not eof(f) do begin
inc(n); read(f, arr[n]);
end;

rewrite(f);
for i := 1 to n div 2 + n mod 2 do begin
write(f, arr[i]);
if i <> (n - i + 1) then
write(f, arr[n - i + 1]);
end;
close(f);
end.
 К началу страницы 
+ Ответить 
Iren
сообщение 27.11.2005 14:11
Сообщение #4


Гость






ГИГАНТСКОЕ Вам спасибо To: volvo , вторую программу я еще не смотрела, а вот по первой возникло несколько вопросов:
1. На экран у меня почему-то выводятся две абсолютно одинаковые матрицы.
2. Наверное лучше сделать ввод матрицы вручную (тоесть убрать RANDOM), но как это сделать. Или оставить ввод случайных чисел
 К началу страницы 
+ Ответить 
volvo
сообщение 27.11.2005 14:20
Сообщение #5


Гость






Цитата
1. На экран у меня почему-то выводятся две абсолютно одинаковые матрицы.

blink.gif Откуда выводятся 2 матрицы? Там же только одна должна выводиться, и потом подсчитывается нужная сумма... Может, ты запустила ее 2 раза по ошибке?
Цитата
2. Наверное лучше сделать ввод матрицы вручную

  for i := 1 to size do
for j := 1 to size do begin
write('a[', i:3, j:3, '] = '); readln(arr[i, j]);
{
arr[i, j] := random(20);
}
end;
 К началу страницы 
+ Ответить 
Iren
сообщение 27.11.2005 15:34
Сообщение #6


Гость






Извините, но ведь в задаче сказано матрица=array [номер, номер] of real, а у вас написано of integer???
 К началу страницы 
+ Ответить 
volvo
сообщение 27.11.2005 15:48
Сообщение #7


Гость






Iren, извините, а что, так трудно поменять? Или Вы предпочитаете писать остальные программы самостоятельно? dry.gif Удачи !
 К началу страницы 
+ Ответить 
Guest
сообщение 27.11.2005 16:28
Сообщение #8


Гость






Да нет, вы меня неправильно поняли, извините если я Вас обидела.
Просто если я изменяю тип массива на real, появляется ошибка несоответствия типов, а если я меняю на real еще и оставшиеся типы, то появляется ошибка "Недопустимая управляющая переменная оператора for'...
Еще раз простите...
 К началу страницы 
+ Ответить 
volvo
сообщение 27.11.2005 16:32
Сообщение #9


Гость






no1.gif Никаких ошибок. Надо было просто изменить тип функции Sum и переменной S внутри нее... Вот так:
const
size = 10;
type
number = 1 .. size;
matrix = array[number, number] of real;

byteset = set of number;

function sum(var a: matrix; s1, s2: byteset): real;
var
i, j: integer;
s: real;
begin
s := 0;
for i := 1 to size do
for j := 1 to size do
if (i in s1) and (j in s2) then s := s + a[i, j];
sum := s;
end;

var
arr: matrix;
i, j: number;

begin
for i := 1 to size do
for j := 1 to size do
arr[i, j] := random(20);

for i := 1 to size do begin
for j := 1 to size do
write(arr[i, j]:4);
writeln;
end;

writeln('sum = ', sum(arr, [1, 3], [2]));
end.
 К началу страницы 
+ Ответить 
Iren
сообщение 27.11.2005 17:17
Сообщение #10


Гость






Еще раз спасибо Вам большое за помощь ...
 К началу страницы 
+ Ответить 
Iren
сообщение 29.11.2005 12:05
Сообщение #11


Гость






С первой задачкой все супер, большое вам спасибо...
Но вот со второй разобраться никак не получается, не могу понять принципа ее работы: создаю файл f_in.dat с числами, пытаюсь запустить программу, но появляется ошибка disk read error, может быть лучше сделать создание файла, а не использование готового (как я поняла, для этого достаточно изменить rewrite на write???)...
 К началу страницы 
+ Ответить 
klem4
сообщение 29.11.2005 12:14
Сообщение #12


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


приведи пожалуйста текст того, то ты запускаешь, + как ты можешь сама создать типизированный файл ? Это только программно можно сделать ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.11.2005 13:28
Сообщение #13


Гость






Цитата
как я поняла, для этого достаточно изменить rewrite на write

no1.gif Для этого достаточно сделать так:
Assign(f, 'f_in.dat'); Rewrite(f);
Write('Количество элементов: '); ReadLn(n);
for i := 1 to n do begin
write('a[', i:2, '] = '); readln(arr[1]);
write(f, arr[1]); { именно 1 а не i }
end;
close(f);
и вставить этот фрагмент перед открытием файла для чтения (т.е. сразу после первого Begin) в моей программе...
 К началу страницы 
+ Ответить 
Guest
сообщение 29.11.2005 14:13
Сообщение #14


Гость






Вставила, но получается просто пустой файл создается mega_chok.gif
 К началу страницы 
+ Ответить 
Iren
сообщение 29.11.2005 14:13
Сообщение #15


Гость






Вставила, но получается просто пустой файл создается mega_chok.gif
 К началу страницы 
+ Ответить 
Iren
сообщение 29.11.2005 14:17
Сообщение #16


Гость






Цитата
приведи пожалуйста текст того, то ты запускаешь, + как ты можешь сама создать типизированный файл ? Это только программно можно сделать ...

Код

var
 arr: array[1 .. 100] of integer;
 i, n: integer;
 f: file of integer;
begin
Assign(f, 'f_in.dat'); Rewrite(f);
Write('Количество элементов: '); ReadLn(n);
for i := 1 to n do begin
 write('a[', i:2, '] = '); readln(arr[1]);
 write(f, arr[1]); { именно 1 а не i }
end;
close(f);
 assign(f, 'f_in.dat');
 reset(f); n := 0;
 while not eof(f) do begin
 inc(n); read(f, arr[n]);
 end;
 rewrite(f);
 for i := 1 to n div 2 + n mod 2 do begin
   write(f, arr[i]);
   if i <> (n - i + 1) then
     write(f, arr[n - i + 1]);
 end;
 close(f);
end.
 К началу страницы 
+ Ответить 
volvo
сообщение 29.11.2005 14:54
Сообщение #17


Гость






Ozzя, я для кого написал в комментариях { именно 1 а не i } ??? Внимательно читать будем или будем все по-диагонали?

Iren, все должно работать... Сейчас проверю...
 К началу страницы 
+ Ответить 
volvo
сообщение 29.11.2005 15:00
Сообщение #18


Гость






Iren, все прекрасно работает... Какой "пустой" файл? Ты размер его видела? То, что этот файл НЕ просматривается обычным редактором - это не значит, что он пустой. Внимательно перечитай задание:
Цитата
В данном файле целых чисел с элементами A1, A2, …, AN (N — количество элементов в файле). Заменить исходное расположение его элементов на следующее: A1, AN, A2, AN–1, A3, … .

Это файл НЕ текстовый, а типизированный... Его надо не только создавать, но и просматривать программно...
 К началу страницы 
+ Ответить 
Iren
сообщение 29.11.2005 15:43
Сообщение #19


Гость






Цитата
Это файл НЕ текстовый, а типизированный... Его надо не только создавать, но и просматривать программно...

А как это реализовать: надо что-то добавить в эту программу или писать отдельную???
 К началу страницы 
+ Ответить 
Iren
сообщение 29.11.2005 15:59
Сообщение #20


Гость






И еще: как я поняла данная программа создает новый типизированный файл, затем в него вводятся целые числа (в порядке A1, A2 ... AN), затем программа изменяет порядок этик целых чисел ( A1, AN, A2, AN–1, A3, … ).
Но мне непонятен один момент: в программе вводится только число элементов, но не они сами. Ведь так ???
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 9:49
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"