Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Бабалова Алгоритмизация задач и структурирование программ 2013

.pdf
Скачиваний:
9
Добавлен:
12.11.2022
Размер:
1.29 Mб
Скачать

Рис. 31. Алгоритм удаления элемента из списка

unit Unit_game_n; interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, StdCtrls; type

TForm1 = class(TForm) ListBox1: TListBox; MainMenu1: TMainMenu; N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

81

N7: TMenuItem; Edit1: TEdit; Label1: TLabel; ListBox2: TListBox; Label2: TLabel; Label3: TLabel;

procedure N1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure N7Click(Sender: TObject); private

{Private declarations } public

{Public declarations } end;

Plist=^list;

List=record

igr:integer;

next:Plist;

end;

var

Form1: TForm1; Head, pl:Plist; n, k:integer;

implementation {$R *.dfm}

Function create_l(k:integer):Plist;

//Создание списка игроков var lp,ls:plist;

i:integer;

begin i:=1;

while i<=k do begin

if pl=nil then

82

begin new(lp); lp^.igr:=i; lp^.next:=nil;

pl:=Lp;//начало списка end else

begin new(ls); lp^.next:=ls; ls^.igr:= i;

ls^.next:=nil;

lp:=ls;

end;

i:=i+1;

end;

Result:=pl;

end;

Procedure Vivod_spisok(var p:plist;b:boolean);

//Выводится список всех игроков

//или тех, кто остался в игре

var lp:plist; begin lp:=pp;

while lp<>nil do begin

if b then

Form1. ListBox1.Items.Add(inttostr(lp^.igr)) else

Form1. ListBox2.Items.Add(inttostr(lp^.igr)); lp:=lp^.next;

end;

end;

Procedure Del_gamer(var pp:plist;kk:integer); // Удаляется игрок с номером kk

var dp,dl,lx:plist; begin

lx:=pp;

if lx=nil then

83

Form1.label3.Caption:='Список пуст' else

if (lx=pp)and (lx^.igr=kk)then begin

pp:=pp^.next;

dispose(lx);

end;

lx:=pp;

while (lx<> nil) do

if (lx^.igr <>kk) then begin

dl:=lx;

lx:=lx^.next; end else

begin

dl^.next:= lx^.next; dispose(lx); lx:=dl;

end;

end;

procedure TForm1.FormCreate(Sender: TObject); begin

pl:=nil;

end;

procedure TForm1.N1Click(Sender: TObject); begin

randomize;

n:=random(12)+3;

pl:=nil;

ListBox1.Clear; Head:=create_l(n);

end;

procedure TForm1.N2Click(Sender: TObject); var t:boolean;

begin t:=true;

Listbox1.Clear; Vivod_spisok(head,t);

end;

84

procedure TForm1.N4Click(Sender: TObject); var i:integer;

begin i:=Strtoint(Edit1.Text); k:=i;

end;

procedure TForm1.N5Click(Sender: TObject); begin

ListBox2.Clear; Del_gamer(head,k);

end;

procedure TForm1.N6Click(Sender: TObject); var pp:plist;

t:boolean; begin ListBox2.Clear; t:=false;

vivod_spisok(head,t); end;

procedure TForm1.N7Click(Sender: TObject); begin

close; end; end.

Форма с результатом решения задачи приведена на рис. 32

Рис. 32. Результат удаления одного игрока

Для вывода списков игроков использованы компоненты типа

TListBox.

85

Задачи для самостоятельной работы

Общие требования к разработке программ в этом разделе:

обязательное графическое представление структуры программы;

все методы обработки данных оформляются процедурами или функциями;

Все методы по обработке данных изображаются алгоритмами

все исходные данные сохраняются в файле;

обеспечивается вывод всех результатов решения задачи;

последовательность выполнения всех этапов решения задачи обеспечивается через меню.

5.1.Вводится произвольная последовательность целых чисел. Сохранить последовательность в файле. Создать односвязный список из введенных значений. Поменять в списке порядок записи чисел на противоположный.

5.2.Вводится последовательность натуральных чисел xi. Исходная последовательность сохраняется в файле и создается из нее односвязный список. Длина последовательности n. Обеспечить с помощью списка вычисление сумм и произведений вида.

1) x1 *xn+ x2*xn-1..... .........xn*x1;

2) (x1 + xn) * (x2 + xn-1)..... ......

*(xn + x1).

5.3.Данные о фондах библиотеки занести в файл в формате: автор книги, название книги, шифр издания (тоже строка), год издания, количество книг данного названия. Из всех сведений создать список книг одного автора. Вывести полученный список на экран. Обеспечить внесение в полученный список новых сведений и исправление старых сведений. Фамилию автора вводить в диалоге.

5.4.Вводится произвольный текст из неизвестного количества строк. Сохранить текст в файле. Представить текст в виде односвязного списка строк, длина которых не превышает только 30 символов. Определить число строк такой длины в тексте, обеспечить перестановку i-й и j-й строк. Номера строк вводятся в диалоге.

5.5.Есть последовательность сведений следующего формата:

номер операции, стоимость операции. Все сведения должны быть сохранены в файле. Создать стек из введенных данных. Определить с помощью стека стоимость выполнения набора операций, опреде-

86

ляемого последовательностью случайных чисел на отрезке [1,n], где n – число возможных операций при каждой их выборке. Количество всех сведений m >= n.

5.6.Вводится последовательность целых чисел и записывается

вфайл. Для обработки последовательности создаем очередь. Определить среднее арифметическое для этой последовательности. В диалоге вводится некоторое число K. Заменить все значения элементов, равные введенному числу K, на m = –1. Определить число этих замен для каждого варианта списка.

5.7.Вводится последовательность слов и записывается в файле. Создать односвязный список из слов. Определить количество одинаковых слов в списке. Удалить все одинаковые слова. Вывести на экран список и его получившуюся длину.

5.8.Задается некоторая последовательность чисел. Сохраняется последовательность в файле. Создать односвязный список. Найти в списке наибольший и наименьший элементы и поменять их местами. Результаты обработки списка и исходный список вывести на экран.

5.9.Задается некоторая последовательность чисел. Сохранить последовательность в файле. Создать стек. Упорядочить стек по убыванию чисел. Удалить из стека наименьший элемент. Результаты обработки стека и исходные данные вывести на экран.

5.10.Ввести последовательность целых положительных чисел из n значений. Сохранить последовательность в файле. Создать списки из чисел, имеющих одинаковые старшие разряды. Например, введена последовательность 234, 456.23, 47, 31, 56, 2078. Один список будет содержать 234, 23, 2078. Другой список 456, 47 и т.д. Создать процедуру слияния этих списков в исходную последовательность.

5.11.Исходные данные задаются в виде значения и номера этого значения в последовательности размерности n. Например: (45, 3), (12, 5),(48, 1),(89, 2), (33, 4),(55, 7),(19, 6). Обеспечить проверку наличия всех индексов в последовательности от 1 до n. Создать двусвязный список из значений элементов последовательности, упорядоченных по их номерам.

5.12.Вводится некоторая последовательность букв русского алфавита и записывается в памяти в виде линейного списка. Опреде-

87

лить упорядочена ли последовательность по алфавиту. Упорядочить буквы. Заменить выбранную K-ю букву на Q-ю, поменять местами первую и последнюю буквы.

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

5.14.В файл записать некоторую последовательность из слов S

неизвестной длины. Создать список из слов, считанных из файла. Удалить из списка все одинаковые слова. Вывести исходный список и результат обработки. Новый список также сохранить в файле.

5.15.В файл занести сведения об автомобилях: фамилия владельца, марка автомобиля, номер автомобиля. Прочитать из файла

изаписать в виде списка все имеющиеся сведения. Создать списки всех владельцев заданной марки автомобиля. Результаты поисков вывести на экран.

5.16.В файл заносится последовательность слов и записывается в памяти в виде списка при чтении из файла. Обеспечить перестановку слов в списке в обратном порядке. Вывести исходный список и преобразованный. В файле сохраняется исходный вид последовательности.

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

5.18.Создать кольцевой список из букв латинского алфавита. В файле имеется последовательность английских слов. Прочитать из файла эти слова. Создать список из этих слов, поменяв каждую букву слова на букву, стоящую на расстоянии тринадцати букв в алфавите. Например; a – n, d – q, z – m.

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

5.20.В файле создать последовательность сведений о сотрудниках некоторой организации. Формат сведений: фамилия, имя, отче-

88

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

5.21.В текстовый файл записана последовательность слов. Создать из слов списки по длине слова: две буквы в слове, три буквы в слове и т.д. Считаем, что слов, содержащих более 10 букв, в последовательности нет. Вывести по запросу пользователя любой из списков. Удалить из каждого списка одинаковые слова по запросу пользователя.

5.22.В память в виде линейного списка заносятся сведения о студентах и их оценках по двум предметам. Формат сведений: фамилия, оценка 1, оценка 2. Все сведения сохраняются в файле. Создать списки из отличников, неуспевающих и остальных студентов. Добавить

всведения нового студента. Вывести исходный и результирующие списки на экран.

5.23.В файл заносится неупорядоченный список абонентов телефонной сети в формате: фамилия, имя, отчество, адрес, номер телефона. Создать кольцевой список из этих сведений. Обеспечить вывод сведений обо всех однофамильцах с их номерами телефонов,

атакже удаление и вставку нового абонента.

5.24.Задается некоторая последовательность чисел. В памяти последовательность хранится в виде списка. Найти в списке элементов наибольший элемент и поместить его в конец списка. Заменяемый элемент вставить на его место. Последовательность сохраняется в файле. Результаты обработки и исходный список вывести на экран.

5.25.Из файла читается последовательность вещественных чисел и записывается в виде списка. Определить длину списка. В диалоге вводится некоторый номер n. Удалить из списка элементы с n-го по n+4. Вывести исходный и результирующий списки

5.26.В файл записывается последовательность целых чисел. Прочитать последовательность из файла и записать ее в виде стека в памяти. Определить длину стека. Удалить из стека все отрицательные элементы. Вывести содержимое исходного и результирующего стеков на экран.

5.27.В файл записывается последовательность целых чисел. Создается линейный список из считанной последовательности. Из ис-

89

ходного списка создать список всех совпадающих элементов. Вывести исходный список и список выбранных элементов на экран.

5.28.В файл заносятся сведения о жителях некоторой улицы: фамилия, адрес, год рождения. Все сведения записываются в памяти

ввиде линейного списка. Вводится некоторая текущая дата (год). В списке сведений найти всех жителей, имеющих право участвовать в выборах (возраст >=18). Список полученных сведений вывести на экран.

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

5.30.В файл надо записать некоторый текст. Каждое предложение текста заканчивается точкой. Составить список из предложений текста, удалив в каждом предложении лишние пробелы (более одного). Записать список в файл. Вывести на экран исходный и преобразованный тексты.

5.31.Создается текстовый файл из слов разной длины. Прочитать из файла слова в список типа очереди. Упорядочить список по длине слов. Обеспечить просмотр списка слов, удаление любого выбранного слова, вставки слова на правильное место по признаку упорядоченности.

5.32.В файл внести сведения о владельцах автомобилей в формате: фамилия, имя, отчество владельца автомобиля, марка автомобиля, год выпуска, номер автомобиля. Разработать список типа очереди, где в начале очереди стоят владельцы самых старых автомобилей. Сформировать списки по владельцам разных марок автомобилей. Обеспечить исправление сведений в списках.

5.33.В файл занести сведения о заработной плате сотрудников некоторой организации в формате: номер отдела, должность, ставка, фамилия, имя, отчество. Создать в памяти кольцевой список из сотрудников организации. Список упорядочить по фамилиям. Обеспечить исправление сведений о сотрудниках, в том числе и изменение числа сотрудников.

90