Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 8

Процедуры. Вставка в список

19.01.2013, 00:36. Показов 7005. Ответов 4

Студворк — интернет-сервис помощи студентам
Задача такая.
создания динамического линейного списка, выбирая числа из текстового файла;
вывода динамического линейного списка;
обработка динамического списка по алгоритму
1)в непустой список L, элементы которого упорядочены по неубыванию (т.е. по возрастанию или равные), новый элемент Е так, чтобы сохранилась упорядоченность;
2)вставляет в список L за первым вхождением элемента Е все элементы списка L1, если Е входит в список L;
вот программа
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
uses crt;
type uk=^nom;
nom=record
     chis:integer;
     adr:uk;
end;
var p1,p2,p3,first:uk;
    f:text;
    q,s,k:integer;
 
procedure sozd_spis;
begin
     assign(f,'D:\файл.txt');
     reset(f);
     first:=nil;
     while not seekeof(f) do
           begin
                new(p1);
                readln(f,p1^.chis);
                if first=nil
                   then first:=p1
                   else p2^.adr:=p1; 
                p2:=p1;
           end;
p2^.adr:=nil;
end;
 
procedure vivod_spis;
begin
     p1:=first;
     while p1<>nil do
           begin write(p1^.chis,' ');
                 p1:=p1^.adr;
           end;
           readkey;
end;
 
procedure dobav;
var d:uk;
begin
new(d);
d^.adr:=nil;
write('введи число');
readln(d^.chis);
 
p1:=first;
q:=1;
 
while (p1<>nil) and (q=1) do
begin
 
if p1^.chis>=D^.chis then
   begin
        q:=0;
        if p1=first then
        begin
             d^.adr:=first;
             first:=d;
        end
        else
        begin
 
             d^.adr:=p2^.adr;
             p2^.adr:=d;
        end
  end
      else
          begin p2:=p1;
                p1:=p1^.adr;
          end;
end;
 
if q=1 then p2^.adr:=d;
 
end;
 
 
begin
repeat
clrscr;
writeln('1 - создание списка');
writeln('2 - вывод списка');
writeln('3 - добавление');
writeln('4 - выход');
case readkey of
'1': sozd_spis;
'2': vivod_spis;
'3': dobav;
'4': exit;
end;
until false;
end.
Помогите сделать 2 часть задания. Допишите процедуру.. и если можно с комментариями
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.01.2013, 00:36
Ответы с готовыми решениями:

Вставка процедуры в БД
Здравствуйте, уважаемые! Имеется процедура из туториала: CREATE OR REPLACE FUNCTION add_event( title text, starts timestamp, ends...

Вставка процедуры SumOfSquares на Assembler в VirtualPascal
1. Написать программу в среде Virtual Pascal (на Паскале), использующую представленную функцию. function SumOfSquares(const Data:...

Вставка процедуры Log2 на Assembler в VirtualPascal
Помогите реализовать следующее задание 1)Написать программу в среде Virtual Pascal (на Паскале), использующую представленную функцию. {...

4
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
19.01.2013, 15:04
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Функция AddList вставляет список L2 в список L1 после элемента со значением "e".
//Если список L2 пуст или элемент со значением "e" не найден в списке L1, то вставка не выполняется.
//Функция возвращает значение True, если список L2 вставлен в список L1.
//Иначе - функция возвращает значение False.
function AddList(var L1 : uk; const L2 : uk; const e : Integer) : Boolean;
var
  Elem1, End2 : uk;
begin
  AddList := False;
  //Если список L2 пуст, то вставлять нечего. Выходим.
  if L2 = nil then Exit;
  
  //Ищем указатель на последний элемент в списке L2.
  End2 := L2;
  while End2^.Next <> nil do End2 := End2^.adr;
  
  //В списке L1 ищем указатель на элемент со значением "e".
  Elem1 := L1;
  while (Elem1 <> nil) and (Elem1^.chis <> e) do Elem1 := Elem1^.adr;
  //Если элемент найден, вставляем после него список L2.
  if Elem1 <> nil then begin
    //К концу списка L2 прикрепляем часть списка L1, которая идёт после элемента Elem1.
    End2^.adr := Elem1^.adr;
    //Начало списка L2 прикрепляем к элементу Elem1.
    Elem1^.adr := L2;
    AddList := True;
  end;
end;
1
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 8
20.01.2013, 11:33  [ТС]
а как сделать так чтобы я сам мог ввести число e?
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
20.01.2013, 15:05
t-stranger, я подправил код. Полностью программа будет такой:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
program Project1;
 
uses crt;
 
type uk=^nom;
nom=record
     chis:integer;
     adr:uk;
end;
 
{Освобождение памяти, занятой под список.}
procedure Free(var aFirst : uk);
var
  PDel : uk;
begin
  while aFirst <> nil do begin
    PDel := aFirst;
    aFirst := aFirst^.adr;
    Dispose(PDel);
  end;
end;
 
procedure sozd_spis(var aFirst : uk; const aFileName : String);
var
  f : text;
  p1, p2 : uk;
begin
     assign(f, aFileName);
     reset(f);
     Free(aFirst);
     while not SeekEof(f) do
           begin
                new(p1);
                read(f,p1^.chis);
                if aFirst=nil
                   then aFirst:=p1
                   else p2^.adr:=p1;
                p2:=p1;
           end;
     close(f);
     p2^.adr:=nil;
     writeln('Список введён из файла: ', aFileName);
end;
 
procedure vivod_spis(const aFirst : uk);
var
  p1 : uk;
begin
     p1:=aFirst;
     while p1<>nil do
           begin write(p1^.chis,' ');
                 p1:=p1^.adr;
           end;
     writeln;
end;
 
procedure dobav(var aFirst: uk);
var
  d, p1, p2 : uk;
  q : integer;
begin
new(d);
d^.adr:=nil;
write('введи число: ');
readln(d^.chis);
 
p1:=aFirst;
p2:=nil;
q:=1;
 
while (p1<>nil) and (q=1) do
begin
 
if p1^.chis>=D^.chis then
   begin
        q:=0;
        if p1=aFirst then
        begin
             d^.adr:=aFirst;
             aFirst:=d;
        end
        else
        begin
             d^.adr:=p2^.adr;
             p2^.adr:=d;
        end
   end
      else
          begin p2:=p1;
                p1:=p1^.adr;
          end;
end;
 
if q=1 then begin
  if p2 <> nil then
    p2^.adr:=d
  else
    aFirst:=d;
end;
 
end;
 
{Функция AddList вставляет список L2 в список L1 после элемента со значением "e".
Если список L2 пуст или элемент со значением "e" не найден в списке L1, то вставка не выполняется.
Функция возвращает значение True, если список L2 вставлен в список L1.
Иначе - функция возвращает значение False.
Если список L2 вставлен в L1, то устанавливается L2 := nil.}
function AddList(var L1, L2 : uk; const e : Integer) : Boolean;
var
  Elem1, End2 : uk;
begin
  AddList := False;
  {Если список L2 пуст, то вставлять нечего. Выходим.}
  if L2 = nil then Exit;
 
  {Ищем указатель на последний элемент в списке L2.}
  End2 := L2;
  while End2^.adr <> nil do End2 := End2^.adr;
 
  {В списке L1 ищем указатель на элемент со значением "e".}
  Elem1 := L1;
  while (Elem1 <> nil) and (Elem1^.chis <> e) do Elem1 := Elem1^.adr;
  {Если элемент найден, вставляем после него список L2.}
  if Elem1 <> nil then begin
    {К концу списка L2 прикрепляем часть списка L1, которая идёт после элемента Elem1.}
    End2^.adr := Elem1^.adr;
    {Начало списка L2 прикрепляем к элементу Elem1.}
    Elem1^.adr := L2;
    L2 := nil;
    AddList := True;
  end;
end;
 
var
  first1, first2 : uk;
  e : integer;
  ch : char;
begin
clrscr;
first1 := nil;
first2 := nil;
repeat
writeln('1 - создание первого списка');
writeln('2 - вывод первого списка');
writeln('3 - создание второго списка');
writeln('4 - вывод второго списка');
writeln('5 - добавление элемента в первый список');
writeln('6 - вставка второго списка в первый');
writeln('7 - выход');
readln(ch);
case ch of
'1': sozd_spis(first1, 'file1.txt');
'2': vivod_spis(first1);
'3': sozd_spis(first2, 'file2.txt');
'4': vivod_spis(first2);
'5': dobav(first1);
'6':
  begin
    Write('Задайте значение искомого элемента: ');
    Readln(e);
    if AddList(first1, first2, e) then
      Writeln('Второй список вставлен в первый после первого элемента со значением ', e)
    else
      Writeln('Второй список не вставлен в первый, так как не выполнены условия вставки.');
  end;
'7':
  begin
    Free(first1);
    Free(first1);
    Writeln('Память, выделенная для списков, освобождена.');
  end;
else
  Writeln('Неизвестная команда. Повторите ввод.')
end;
until ch = '7';
Writeln('Программа завершена. Для выхода нажмите Enter.');
Readln;
end.
Добавлено через 1 минуту
В папку с программой надо положить два файла: file1.txt и file2.txt - в этих файлах должны быть записаны элементы первого и второго списка, соответственно.
2
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 36
02.02.2014, 15:49
Нашел свою ошибку, получилось, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.02.2014, 15:49
Помогаю со студенческими работами здесь

Вставка в список
Вставить в список из 15 элементов число 36: 1. после десятого элемента; 2. перед первым чётным элементом. Прошу написать легкий...

Вставка элемента в Список
import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class T1 { public static void main(String...

Вставка подсписка в список
Помогите разобраться с задачей: Разработать функцию, осуществляющую вставку в исходный список подсписка за элементом с номером N. ...

Вставка элементов в список
Здравствуйте, помогите, пожалуйста, с заданием, очень нужно! Описать процедуру, которая вставляет: 1) В список L новый элемент E1 перед...

Вставка в линейный список
Привет всем, не пойму почему функция insert не правильно работает(, а в частности, установление нового узла с предыдущим. После вставки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru