Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ ПРЕДСТАВЛЕНИЕ И ОБРАБОТКА ЛИНЕЙНЫХ СПИСКОВ

Автор: freejaile 28.04.2007 23:49

Заданы 2 уравнения. Требуется найти общую переменную с мини-
мальным номером, и, если она есть, исключить ее из второго
уравнения. При этом второе уравнение должно измениться, чтобы
система из 2 уравнений осталась эквивалентной заданной.
Если при изменении второго уравнения один из его коэффи-
циентов оказывается равным 0, то этот элемент надо из списка
исключить. Если после таких исключений второе уравнение будет
иметь вид 0=a (или 0=0), то об этом должна выдаваться поясня-
ющая информация.

т.е. нужно примерно это:
1. задать 2 уравнения
2. найти общую переменную с мин.номером
3. удалить из второго уравнения найденную переменную:
-умножить коэффициенты 2-го уравнения на к.1-го
-наоборот
4. вычесть из первого ур-ия второе
5.сравнитьвторое с нулем

помогите плз)

Автор: мисс_граффити 29.04.2007 0:36

Замечательно все разделено по пунктам.
На каком этапе сложности?

Автор: freejaile 29.04.2007 0:38

Цитата(мисс_граффити @ 28.04.2007 22:36) *

Замечательно все разделено по пунктам.
На каком этапе сложности?

стараемся)
не совсем поняла про сложность...для 1 курса)

Автор: Altair 29.04.2007 0:47

freejaile, насчет сложности тебе хотели сказать, что за тебя вряд-ли кто то станет делать все.
начни делать сама, и если возникнут трудности, задавай вопросы конкретнее.
Пока вопросов у тебя нет.

Вот у меня например вопрос такой

Цитата
найти общую переменную с мин.номером

Что значит общую переменную? пример привести можешь?

Автор: freejaile 29.04.2007 0:50

В том-то и проблема, что вся задача один большой вопрос(((

Автор: мисс_граффити 29.04.2007 1:21

freejaile, ну почему же сплошной вопрос smile.gif
давай пробовать по порядку.

Цитата
1. задать 2 уравнения

надо уметь создавать списки. почитай FAQ, воспользуйся поиском...
я бы хранила записи из трех полей:
номер переменной, коэффициент и указатель на следующую переменную.
То есть уравнение
3x1+4x2=8
представится в виде
1/3/указатель на второй элемент
2/4/nil

Автор: freejaile 29.04.2007 1:37

type Sp = ^Spisok;
Spisok = record
ind : word;
k : real;
next : sp;
end;
TList = object
procedure SetSp (RSP : Sp; Ri : word; Rk : real);
{ещё куча всяких ещё ненаписанных методов}
end;
procedure TList.SetSp (RSp : Sp; Ri : word; Rk : real);
begin
RSp^.ind := Ri;
RSp^.k := Rk;
RSp^.next := nil;
end;


или вот есчо вариант:
const n=10; (это у нас по условию лабы так..)
...
var i:integer;
...
for i:=1 to n do
begin
writeln('введите', i ,'номер переменной');
readln (ri);
writeln('введите', i ,'коэффициент при переменной');
readln (rk);
RSp^.ind := Ri;
RSp^.k := Rk;
end;
if i=n then rsp^.next:=nil else
begin
new (rsp^.next);
rsp:=rsp^.next;
end;


это примерно так?..

М
Правда, с тегами красивее получается? Пожалуйста, не забывай ими пользоваться.
мисс_граффити


Автор: мисс_граффити 29.04.2007 4:55

Давай разбираться...
1. Хочешь объектно-ориентированное? Тогда делай и поля, а не только методы... Принцип инкапсуляции, все-таки.

procedure TList.SetSp (RSp : Sp; Ri : word; Rk : real);

хотя бы для приличия напиши, какой параметр var, а какой - const

сложно оценивать правильность процедры. неизвестно, как ты ее вызываешь.
я бы делала несколько иначе: передавала указатель на последний элемент и значение для ind и k.
Внутри процедуры:
1) Выделяла память под новый элемент списка
2) последний элемент^.next:=новый элемент
3) последний элемент:=новый элемент
4) заполнила поля ind и k переданными значениями, next - nil'ом

2. что-то ты не то делаешь...
цикл:
for i:=1 to n do
begin
writeln('введите', i ,'номер переменной');
readln (ri);
writeln('введите', i ,'коэффициент при переменной');
readln (rk);
RSp^.ind := Ri;
RSp^.k := Rk;
end;

а это выполняется уже ПОСЛЕ цикла!
if i=n then rsp^.next:=nil else
begin
new (rsp^.next);
rsp:=rsp^.next;
end;


теперь - по поводу обеих. ты не хранишь указатель на самый первый элемент. а надо бы... иначе мы все элементы, кроме последнего, потеряем.

Автор: volvo 29.04.2007 12:10

freejaile, можно немного дополнить?

Если хочешь действительно ООП - делай объектами не только сам список, но и его элементы - это значительно облегчит использование списка... И добавит ему гибкости, кстати...

Автор: freejaile 29.04.2007 14:26

Цитата(volvo @ 29.04.2007 10:10) *

freejaile, можно немного дополнить?

Если хочешь действительно ООП - делай объектами не только сам список, но и его элементы - это значительно облегчит использование списка... И добавит ему гибкости, кстати...


аха, нам изначально нужно список объектов...

мисс_граффити, пасип)) сделала указатель вначало списка...

сделаю печать..а дальше не наю как(