Авторизация

Закрыть окно
Google ВКонтакте Facebook OpenID Яндекс Twitter


Регистрация     Сменить/востановить пароль


  • Украинский
  • Русский
Тема: pascal (Прочитано 369 раз)
Зарегистрированные пользователи не просматривают эту тему.

малёк


Димка-Карапуз)

Карма: +0/-0
Сообщений: 10

Откуда: Киев\Черкассы

Офлайн Офлайн
pascal
помогите пж сделать лабу.
В паскале в последовательности чисел найти Максимальное и Минимальное. Поменять их местами. Задачу выполнить на динамическую память(списки).

Помогите пж написать продцедуру обмена местами на месте звездочек *****

program lab9;
uses crt;
type list=^t;
t=record
data:integer;
next:list;
head:list;
end;
var p,head,q:list;
max,min:integer;

procedure vvid(var p,head:list);
var x:integer;
q:list;
begin
writeln('Vvesit spusok');
p:=nil;{Spusok pystui}
readln(x);
if x<>0 then
begin
new(q);
q^.data:=x;
q^.next:=nil;
head:=q;
p:=q;
readln(x);
while x<>0 do
begin
new(q^.next);
q:=q^.next;
q^.data:=x;
q^.next:=nil;
readln(x);
end;
end;
writeln;
end;

procedure vuvid(p:list);
begin
while p<>nil do
begin
write(p^.data,' ');
p:=p^.next;
end;
end;

procedure prohid(p:list; var max,min:integer);
begin
max:=p^.data;
min:=p^.data;
while p<>nil do
begin
if p^.data>max then max:=p^.data;
if p^.data<min then min:=p^.data;
p:=p^.next;
end;
writeln('MAX=',max);
writeln('MIN=',min);
end;

******

{---MAIN---}
begin
clrscr;
vvid(p,head);
vuvid(p);
writeln;
prohid(p,max,min);


writeln('-----');
vuvid(p);
writeln;
writeln('-----');
readln;
end.




... зови меня СеКаС
6 июня 2009, 18:36:46

малёк



Карма: +1/-0
Сообщений: 48

Офлайн Офлайн

Re: pascal
[php]procedure prohid(p:list; var max,min:integer, p_index_max,p_index_min:pointer);
var c: intenger;
begin
max:=p^.data;
min:=p^.data;
c := 0;
while p<>nil do
begin
if p^.data>max then
begin
max:=p^.data;
index_max = p;
end;
if p^.data<min then
begin
min:=p^.data;
index_min = p;
end;
p:=p^.next;
c := c + 1;
end;
writeln('MAX=',max);
writeln('MIN=',min);
end;



procedure swap(var a,b:pointer);
var t:pointer;
begin
t := a;
a:=b;
b:=t;
end;
procedure Replace(p_index_min,p_index_max:pointer);
begin
swap(p_index_min^.next,p_index_max^.next);
swap(p_index_min^.head,p_index_max^.head);
end;[/php]

щось типу такого




7 июня 2009, 00:15:14

акула



Карма: +234/-6
Сообщений: 4956

Офлайн Офлайн

Re: pascal
=O я слива лиловая, спелая, садовая!
шось типу того !




Я иду, а за мной толпой бегут скандалы
7 июня 2009, 00:21:15

малёк


Ян

Карма: +1/-0
Сообщений: 11

Откуда: 18-ка

Офлайн Офлайн

Re: pascal
tigresha
=O я слива лиловая, спелая, садовая!
шось типу того !

це питання по тексту проги?
Трохи неточне питання, чи не могла б ти трохи уточнити?




Йа Пивопопивайко))
7 июня 2009, 02:28:58

малёк


Димка-Карапуз)

Карма: +0/-0
Сообщений: 10

Откуда: Киев\Черкассы

Офлайн Офлайн

Re: pascal
разъясни пж:
-твое pointer и мое list это одно и тоже? если нет, то опиши плиз свой pointer
-как работает swap и что там подразумевается под переменными а и b? ну я примерно догадался, что это процедура обмена ссылок между максимальным и минимальным, но все же.




... зови меня СеКаС
7 июня 2009, 14:49:11

акула



Карма: +234/-6
Сообщений: 4956

Офлайн Офлайн

Re: pascal
fowler
tigresha
=O я слива лиловая, спелая, садовая! шось типу того !
це питання по тексту проги? Трохи неточне питання, чи не могла б ти трохи уточнити?

це не питання! Це відповідь




Я иду, а за мной толпой бегут скандалы
7 июня 2009, 15:34:22

малёк



Карма: +1/-0
Сообщений: 48

Офлайн Офлайн

Re: pascal
бачу, зовсім не шариш в програмуванні.

pointer — так, це твій list, але повинно прокатити і так(можеш замінити на ліст, якщо так хочеш)

swap() — поміняти місцями БУДЬ-ЯКІ 2 числа

сама перестановка здійснюється в
swap(p_index_min^.next,p_index_max^.next);
swap(p_index_min^.head,p_index_max^.head);

ми міняємо посилання на наступний і попередній елементи місцями. в принципі, можна було зробити і простіше
procedure swap(var a,b: integer);
var temp: integer;
begin
temp := a;
a:=b;
b:=temp;
end;

procedure Replace(p_index_min,p_index_max:pointer);
begin
swap(p_index_min^.data,p_index_max^.data);
end;

але так не тру




7 июня 2009, 16:55:24

малёк


Димка-Карапуз)

Карма: +0/-0
Сообщений: 10

Откуда: Киев\Черкассы

Офлайн Офлайн

Re: pascal
а тебя не смущает, что мы работаем со списком и меняем элементы с помощью вставки и удаления новых ячеек? (так преподша говорит. ей лет 70, но вродь шарит)

СПС за помощь и твое потраченное время. будем пробовать.




« Последний раз изменено: 8 июня 2009, 00:07:55 CeKaC »

... зови меня СеКаС
8 июня 2009, 00:05:16

малёк



Карма: +1/-0
Сообщений: 48

Офлайн Офлайн

Re: pascal
CeKaC
а тебя не смущает, что мы работаем со списком и меняем элементы с помощью вставки и удаления новых ячеек? (так преподша говорит. ей лет 70, но вродь шарит)

СПС за помощь и твое потраченное время. будем пробовать.

емм.. твоя відповідь може відноситись до мого другого посту, але не до початкового варіанту. якщо ми хочемо поміняти місцями два елементи списку — ми повинні поміняти місцями зв"язки між цими елементами. що я і зробив — поле data і сам pointer на список не міняв. а те що для процедурки swap() ми використовуємо додаткову змінну — це так треба, по інакшому неможливо зробити (точніше, можливо але не з типом pointer або list)




8 июня 2009, 00:33:06

малёк


Димка-Карапуз)

Карма: +0/-0
Сообщений: 10

Откуда: Киев\Черкассы

Офлайн Офлайн

Re: pascal
чего то оно не работает. оно тупо добавляет 0 в начало списка. и все. наверно либо Я либо прога кривая)




... зови меня СеКаС
8 июня 2009, 19:17:17

Перейти к

Комментировать могут только авторизированные пользователи. Пожалуйста, войдите или зарегистрируйтесь!