![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
MagZzz |
![]() ![]()
Сообщение
#1
|
Гость ![]() |
Привет всем! Помогите с задачкой!! :p2:
Предлагается, что уже построен и задан указателем Р связанный односторонний список, элементами которого являются символы. а) Подсчитать число элементов списка. б) Проверить упорядочен ли список по возрастанию. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Это как раз зависит от того, как именно задан список... Если список задан так:
Код type pitem = ^item; item = record elem: char; next: pitem; end; то подсчет числа элементов: Код function count(list: pitem): integer; var x: integer; begin x := 0; while list <> nil do begin list := list^.next; inc(x) end; count := x end; Упорядоченность списка попробуйте сделать сами, я бы для этого ввел дополнительную переменную типа char, и начинал обрабатывать список не с первого, а со второго элемента. |
MagZzz |
![]()
Сообщение
#3
|
Гость ![]() |
Спасибо огромное за совет volvo!
![]() |
MagZzz |
![]()
Сообщение
#4
|
Гость ![]() |
Вот я тут по левому наштряпал программку, но она список сортирует!
![]() ![]() Исходный код program sortir; uses crt; type p_stud=^student; student=record name:string[20]; next:p_stud; end; const sum: longint = 0; var head:p_stud; cur:p_stud; p:p_stud; name:string[20]; node: p_stud; tekst:text; begin clrscr; Writeln(' -- Ishodnyi spisok --'); writeln; assign(tekst,'D:\income.txt'); reset(tekst); while not EOF(tekst) do begin Readln(tekst,name); Writeln('', name,' '); end; close(tekst); assign(tekst,'D:\income.txt'); reset(tekst); Readln(tekst,name); reset(tekst); while not EOF(tekst) do begin Readln(tekst,name); inc(Sum, Length(name)) end; close(tekst); Writeln; Writeln('— Kollichestvo elementov - ', Sum ,' '); Writeln; assign(tekst,'D:\income.txt'); reset(tekst); repeat readln(tekst,name); if length (name)<>0 then begin new(node); node^.name:=name; node^.next:=NIL; cur:=head; p:=NIL; while(name>cur^.name) and (cur<>NIL) do begin p:=cur; cur:=cur^.next; end; if p = NIL then begin node^.next:=head; head:=node; end else begin node^.next:=p^.next; p^.next:=node; end; end; until length(name)=0; cur:=head; writeln(' -- - --'); while cur<>NIL do begin writeln(cur^.name); cur:=cur^.next; end; writeln('----------------------------'); readln; close(tekst); end. Код должен быть в тегах |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Код var is_good: boolean; pred_str: string[20]; last: p_stud; ... last := nil; { Заполняем список БЕЗ сортировки } repeat readln(tekst,name); if name <> '' then begin new(node); node^.name := name; node^.next := nil; if head = nil then head := node else last^.next := node; last := node; end; until name=''; { и проверяем на упорядоченность } is_good := true; pred_str := head^.name; p := head^.next; while (p <> nil) and (is_good) do begin is_good := is_good and (p^.name > pred_str); pred_str := p^.name; p := p^.next end; if is_good then Writeln('упорядочен') else writeln('НЕупорядочен'); Кстати, что, обязательно писать ВСЮ программу в основном блоке? Что, ее нельзя было хоть как-то структурировать? Например, сделать вставку элемента в список отдельной процедурой... Ведь со структурированной программой намного легче работать... |
MagZzz |
![]()
Сообщение
#6
|
Гость ![]() |
Спасибо volvo огромное тебе ещё раз!!
![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:11 |