Вопрос № 83695: Люди плиз помогите я все доделать не могу, мне тут чать программы написали (спасибо еще раз!), но мне нужен именно готовый вариант, очень надо...
вот задание и условия:
"Если в варианте задания (1,2,4,7,11) список является линей-
ным...Вопрос № 83739: Дорбый вечер! Очень Вас прошу, помогите решить задачу. (решение нужно к 24.04.07)
Итак, задача.
Вводятся N чисел, необходимо вывести их на экран в обратном порядке. МАССИВЫ ИСПОЛЬЗОВАТЬ НЕЛЬЗЯ!!!
Спасибо....
Вопрос № 83.695
Люди плиз помогите я все доделать не могу, мне тут чать программы написали (спасибо еще раз!), но мне нужен именно готовый вариант, очень надо...
вот задание и условия:
"Если в варианте задания (1,2,4,7,11) список является линей-
ным уравнением (т.е. - по терминологии линейной алгебры - строкой
расширенной матрицы), то необходимо использовать такой дочерний
объект:
Equ = object (List)
R: real; {значение линейного уравнения}
{...... методы ......}
end;
Если в варианте (3,4,7,11) используется список объектов-спи-
сков (список многочленов или список уравнений), то его также не-
обходимо рассматривать как объект.
Для всех объектов необходимо применять конструкторы, проце-
дуры (или также конструкторы) начального присваивания значений,
процедуры печати в удобном для восприятия виде, а также деструк-
торы (которые должны освобождать всю занятую память). При началь-
ном присваивании значений количество звеньев - т.е. отличных от 0
коэффициентов многочлена - не должно превышать K (также задавае-
мого как const) а номера переменных (звеньев), соответствующие
коэффициенты и значения уравнений - вводиться с клавиатуры или
задаваться датчиком случайных чисел (конкретный способ выбирает
пользователь программы).
4. Заданы список уравнений и массив из N значений переменных.
Требуется посчитать невязку (т.е. максимум среди модулей раз-
ности между фактическим и требуемым значениями уравнений)."
вот, то что есть:
О задаче. Описываем список уравнений как var p: sp1. В объект TEq стоит добавить метод добавления элемента. Создадим список уравнений, зададим каждое из уравнений. Создаём массив из стольких же элементов, сколько уравнений задано, вызываем для каждого из элементов списка (т.е. уравнению) функцию Neviazka и запоминаем в массиве каждое из значений. Потом просто ищем максимум в массиве, это и будет ответом.
}
Const N=5;
Type vec = array [1..N] of integer;
sp = ^spisok;
spisok = record
ind: integer; {индекс}
zn: integer; {коэффициент}
next: sp;
end;
TList = object
ur: sp; {переменная для использования списка}
otv: integer; {свободный член уравнения}
constructor Init; {инициализация списка}
destructor Done; {деструктор объекта}
procedure Add (x: integer); {процедура добавления элемента в список}
procedure Delete (i: integer); {процедура удаления элемента}
function GetKol: integer; {получение количества элементов}
function GetFirst: sp; {получение ссылки на первый элемент}
function Neviazka (var a: vec): integer;
private {ограничение доступа к полям}
first: sp; {первый элемент}
kol: integer; {количество элементов}
end;
sp1 = ^TEq;
TEq = object {список уравнений}
eq: TList;
next: sp1;
constructor Init;
destructor Done;
end;
constructor TEq.Init;
begin
next:= nil;
end;
function TList.Neviazka (var a: vec): integer;
var i: integer;
s: integer;
begin
ur:= first;
s:=0;
for i:=1 to N do
begin
s:= s+ a[i]*ur^.zn;
ur:= ur^.next;
end;
Neviazka:= abs (otv-s);
end;
Отправлен: 22.04.2007, 15:48
Вопрос задал: Вадик (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Verena
Здравствуйте, Вадик!
Вы, вероятно, забываете, что задавали два вопроса об этой задаче и, если объединить код, который я Вам писала, то будет практически вся реализация. В приложении я просто объединила свои ответы и добавила пример использования, надеюсь, теперь Вам всё станет ясно. Надеюсь, ввод уравнений Вы сможете организовать сами.
Удачи!
Приложение:
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: 10-ый класс)
Ответ отправлен: 22.04.2007, 17:04 Оценка за ответ: 5 Комментарий оценки: большое спасибо, очень помогли!
Вопрос № 83.739
Дорбый вечер! Очень Вас прошу, помогите решить задачу. (решение нужно к 24.04.07)
Итак, задача.
Вводятся N чисел, необходимо вывести их на экран в обратном порядке. МАССИВЫ ИСПОЛЬЗОВАТЬ НЕЛЬЗЯ!!!
Спасибо.
Отправлен: 22.04.2007, 21:00
Вопрос задал: Peeny (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Verena
Здравствуйте, Peeny!
Без массивов, мне кажется, проще всего решить через строки:
const N=5;
var s, s1: string;
k, i, j: integer;
begin
s:='';
for i:=1 to N do
begin
readln(k);
str (k, s1); {переводим число в строку и добавляем через пробел к строке}
s:=s+s1+' ';
end;
for i:=length(s) downto 1 do
begin
s1:=''; j:=i;
while (s[j]<>' ') and (j<>0) do dec(j); {ищем начало числа}
if (i<>j) then {если число есть,то переписываем в новую строку и вводим на экран}
for k:=j+1 to i do begin
s1:=s1+s[k];
writeln (s1); end;
end;
end.
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: 10-ый класс)
Ответ отправлен: 22.04.2007, 21:25 Оценка за ответ: 5
Отвечает: Vassea
Здравствуйте, Peeny!
Во-первых, можно с помощью рекурсии:
program p1;
var N:integer;
procedure VV(n:integer);
var s:real;{число}
begin
if n=0 then exit;
write('Введите число');
readln(S);
VV(n-1);
writeln(S);
end;
begin
readln(N);
VV(N);
readln;
end.
Но скорее всего они хотили получить очередь.
program P2;
Type List=^cell;
Cell=record
s:real;
next:list;
end;
var i,n:integer;
P,R:list;
begin
readln(N); P:=nil;
for i:=1 to n do
begin
new(R);
readln(R^.s);
R^.next:=P;
P:=R;
end;
R:=P;
while R<>nil do
begin
writeln(R^.s);
R:=R^.next;
end;
readln;
end.
end;
Ответ отправил: Vassea (статус: 2-ой класс)
Ответ отправлен: 22.04.2007, 23:18 Оценка за ответ: 5