Надо к завтрашнему дню сдать две задачи (крайний срок), сама виновата, дотянула донельзя. Очень прошу, помогите решить: 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, … .
Очень прошу помогите...
volvo
27.11.2005 14:46
Насчет первой - все просто:
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 14:47
Вторая (предполагая, что файл 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 18:11
ГИГАНТСКОЕ Вам спасибо To: volvo , вторую программу я еще не смотрела, а вот по первой возникло несколько вопросов: 1. На экран у меня почему-то выводятся две абсолютно одинаковые матрицы. 2. Наверное лучше сделать ввод матрицы вручную (тоесть убрать RANDOM), но как это сделать. Или оставить ввод случайных чисел
volvo
27.11.2005 18:20
Цитата
1. На экран у меня почему-то выводятся две абсолютно одинаковые матрицы.
Откуда выводятся 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 19:34
Извините, но ведь в задаче сказано матрица=array [номер, номер] of real, а у вас написано of integer???
volvo
27.11.2005 19:48
Iren, извините, а что, так трудно поменять? Или Вы предпочитаете писать остальные программы самостоятельно? Удачи !
Guest
27.11.2005 20:28
Да нет, вы меня неправильно поняли, извините если я Вас обидела. Просто если я изменяю тип массива на real, появляется ошибка несоответствия типов, а если я меняю на real еще и оставшиеся типы, то появляется ошибка "Недопустимая управляющая переменная оператора for'... Еще раз простите...
volvo
27.11.2005 20:32
Никаких ошибок. Надо было просто изменить тип функции 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 21:17
Еще раз спасибо Вам большое за помощь ...
Iren
29.11.2005 16:05
С первой задачкой все супер, большое вам спасибо... Но вот со второй разобраться никак не получается, не могу понять принципа ее работы: создаю файл f_in.dat с числами, пытаюсь запустить программу, но появляется ошибка disk read error, может быть лучше сделать создание файла, а не использование готового (как я поняла, для этого достаточно изменить rewrite на write???)...
klem4
29.11.2005 16:14
приведи пожалуйста текст того, то ты запускаешь, + как ты можешь сама создать типизированный файл ? Это только программно можно сделать ...
volvo
29.11.2005 17:28
Цитата
как я поняла, для этого достаточно изменить rewrite на write
Для этого достаточно сделать так:
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 18:13
Вставила, но получается просто пустой файл создается
Iren
29.11.2005 18:13
Вставила, но получается просто пустой файл создается
Iren
29.11.2005 18:17
Цитата
приведи пожалуйста текст того, то ты запускаешь, + как ты можешь сама создать типизированный файл ? Это только программно можно сделать ...
Код
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 18:54
Ozzя, я для кого написал в комментариях { именно 1 а не i } ??? Внимательно читать будем или будем все по-диагонали?
Iren, все должно работать... Сейчас проверю...
volvo
29.11.2005 19:00
Iren, все прекрасно работает... Какой "пустой" файл? Ты размер его видела? То, что этот файл НЕ просматривается обычным редактором - это не значит, что он пустой. Внимательно перечитай задание:
Цитата
В данном файле целых чисел с элементами A1, A2, …, AN (N — количество элементов в файле). Заменить исходное расположение его элементов на следующее: A1, AN, A2, AN–1, A3, … .
Это файл НЕ текстовый, а типизированный... Его надо не только создавать, но и просматривать программно...
Iren
29.11.2005 19:43
Цитата
Это файл НЕ текстовый, а типизированный... Его надо не только создавать, но и просматривать программно...
А как это реализовать: надо что-то добавить в эту программу или писать отдельную???
Iren
29.11.2005 19:59
И еще: как я поняла данная программа создает новый типизированный файл, затем в него вводятся целые числа (в порядке A1, A2 ... AN), затем программа изменяет порядок этик целых чисел ( A1, AN, A2, AN–1, A3, … ). Но мне непонятен один момент: в программе вводится только число элементов, но не они сами. Ведь так ???
volvo
29.11.2005 20:01
Можно добавить:
reset(f); while not eof(f) do begin read(f, arr[1]); write(arr[1]); end;
можно отдельно написать...
А вообще-то, пора бы думать начать уже, это же все совершенно однотипное !!!
P.S.
Цитата
в программе вводится только число элементов, но не они сами
Правда? Особенно вот тут:
write('a[', i:2, '] = '); readln(arr[1]);
что это делается?
ПО ЗАДАНИЮ не должно вводиться вообще ничего. Но должен быть готовый файл ЦЕЛЫХ, которого у тебя почему-то не оказалось...
Guest
29.11.2005 21:36
Я все поняла, БОЛЬШОЕ спасибо
Iren
8.12.2005 16:03
Не правильно у меня сделана сказали вторая программа надо было еще, что в наборе исходных данных указано имя данного файла (текстовая строка). Все исходные файлы в заданиях данной группы считаются существующими (при чем предполагается, что в файле не менее двух строк), но необходимо предусмотреть возможность изменения в них данных. В качестве результатов работы программы необходимо вывести на экран содержание исходного и полученного файлов. Помогите пожалуста, а то я уже окончательно запуталась и совсем ничего не понимаю...
Guest
8.12.2005 18:19
Ну хотя бы намекните, что надо сделать...
Iren
11.12.2005 19:10
Вот попыталась переделать, не знаю правильно ли (возникают вопросы насчет добавления файлов):
Код
program test; uses crt;
label 1; var arr: array[1 .. 100] of integer; i, n: integer; f: file of integer; s: string; begin clrscr; assign(f, 'f_in.dat'); 1:writeln('view file - v / edit file - e / exit - x : ' ); readln(s); if s = 'v' then begin reset(f); writeln('View file:'); while not eof(f) do begin read(f, arr[n]); write(arr[n], ' '); end; readln; goto 1; end; if s = 'e' then begin reset(f); writeln('Enter number of elements: '); readln(n); writeln; writeln('Enter elements: '); for i := 1 to n do begin write('A[',i,'] : '); readln(arr[1]); write(f, arr[1]); 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;
reset(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); goto 1; end; if s = 'x' then end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.