![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
It's not important |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте!
Требуется ввести многочлен из файла и привести в нем подобные при помощи списка, и вывести результирующий многочлен в конец файла, расположив его члены в порядке убывания степеней.
type Spisok = ^Elem;
Elem = record
koef,step:integer;
next:Spisok;
end;
var a,b,c: Spisok;
vk, vst: Integer;
n,i: Integer;
f: text;
procedure Vvod;
begin
while not eof(f) do
begin
read(f, vk);
read(f, vst);
end;
end;
procedure Pr;
begin
c:=nil;
while (b<>nil) and (b^.step<>vst) do b:=b^.next;
if b<>nil then b^.koef:=b^.koef+vk;
else
begin
new(c);
c^.koef:=vk;
c^.step:=vst;
end;
if c<>nil then
begin
if (c^.step>a^.step) or (a=nil) then
begin
c^.next:=a;
a:=c;
end
else
begin
b:=a;
while (b^.next^.step > c^.step) and (b^.next<>nil) do b:=b^.next;
c^.next:=b^.next;
b^.next:=c;
end;
end;
end;
procedure Vivod;
begin
append(f);
writeln(f); writeln(f);
c:=a;
while b<>nil do
begin
a:=b;
if (c=nil) and (b^.koef>0) then write(f, '+');
if a^.koef <> 0 then
begin
write(f,a^.koef,'x^',a^.step);
end;
b:=b^.next;
dispose(a);
end;
close(f);
end;
BEGIN
assign(f, 'pr_1.txt'); reset(f);
a:=nil;
while not eof(f) do
begin
b:=a;
Vvod;
if (vk<>0) or (vst<>0) then Pr;
end;
b:=a;
close(f);
Vivod;
END.
Пожалуйста, помогите разобраться с выводом в файл. Я не могу понять почему он выводит толкьо последние данные в файле... Благодарю за внимание. |
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
It's not important, я понимаю, что пример - It's not important )). Но все же он сэкономил бы время жаждущим помочь.
Приведи пример входного файла, плз. А заодно и вывод на это пример ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Пожалуйста, помогите разобраться с выводом в файл. При чем здесь вывод в файл? Если не горит лампочка в квартире - это не обязательно выключатель, могут быть еще пробки или общий блэкаут)). В твоей программе вся логика страдает. Начать с того, что она просто не компилируется - уж не знаю, как ты получила свои результаты.. Если убрать ";", то программа скомпилируется, но откуда мне знать, что это правильно? Если запустить - вылетает по ошибке (обращение по нулевому пойнтеру).Я не могу понять почему он выводит толкьо последние данные в файле... Я мог бы дать тебе несколько рекомендаций по сути, но зачем их давать по явно не той программе, с которой ты работаешь? Если выкладываешь программу, выкладывай нужный текст, а не позавчерашний.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Я не могу понять почему он выводит толкьо последние данные в файле... А потому что Vvod так написан: он читает и перечитывает информацию из входного файла, пока не прочитает его полностью. Естественно, что сохраняется только 2 значения: vk и vst (насколько я понимаю, это - коэффициент и степень последнего из членов?), все остальные просто теряются...На самом деле вся программа должна уместиться примерно в 20 строк, ты же здесь делаешь ОЧЕНЬ много лишнего и нецелесообразного. Если хочешь - приведи пример входного файла, я покажу тебе, как сделать то же самое гораздо проще... |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Вот решение, о котором я говорил:
type
Spisok = ^Elem;
Elem = record
koef, step: integer;
next: Spisok;
end;
procedure append_list(var head, tail: spisok; k, st: integer);
var p: spisok;
begin
p := head;
while (p <> nil) and (p^.step <> st) do p := p^.next;
if p = nil then begin
new(p);
with p^ do begin
next := nil; step := st; koef := k;
end;
if head = nil then head := p
else tail^.next := p;
tail := p;
end
else p^.koef := p^.koef + k;
end;
var
vk, vst: integer;
p, head, tail: spisok;
f: text;
begin
assign(f, 'pr_1.txt'); reset(f);
head := nil; tail := nil;
while not eof(f) do begin
readln(f, vk, vst);
append_list(head, tail, vk, vst);
end;
p := head;
close(f); append(f);
while p <> nil do begin
write(f, ' + ', p^.koef, 'X^', p^.step);
p := p^.next;
end;
close(f);
end.
|
It's not important |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: ![]() ![]() ![]() |
в файле:
1 4 4 6 3 4 Ожидаемый результат: 4x^6 + 4x^4 А он выводит 3x^4 пожалуйста, помогите мне разобраться. ![]() |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Читай пост выше...
|
Lapp |
![]()
Сообщение
#8
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
А он выводит 3x^4 Второй раз нижайше прошу: пожалуйста, приведи тот вариант программы, с которым ты работаешь. Приведенный в первом посте не компилируется.пожалуйста, помогите мне разобраться. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 24.07.2025 16:52 |