HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail


 
 

Turbo Pascal Examples.
Детская игра "Считалка"

Графика:
Построение графика функции
Прыгающий по экрану мячик.
Качание маятника.
Вложенные цветные круги.
Броуновское движение. Использование объектов.
Матрицы и массивы:
Сортировка элементов массива.
Удаление одинаковых элементов.
Простой пример на поворот матрицы.
Сортировка методом Шелла. +функции измерения временных интервалов.
Проверка выпуклости многоугольника.
Перемоножение матриц
Вычисление определителя матрицы. Рекурсия.
Нахождение обратной матрицы.
Задача об автостоянке.
Рекурсия. Подземелье сокровищ.
Численные методы:
Задачка на определение угла между стрелками часов.
Проверка на принадлежность точки многоугольнику.
Нахождение точки пересечения двух отрезков на плоскости.
Сортировка методом Шелла. +функции измерения временных интервалов.
Сортировка методом "пузырька". Пример на динамические структуры данных. Связанные списки.
Нахождение корня функции методом половинного деления.
Вычисление арккосинуса
Нахождение суммы цифр натурального числа.
Работа с фалами:
Рекурсивное сканирование директорий.
Работа со строками:
Работа со словами в предложении с разделителями.
Простейший синтаксический анализатор для распознавания и вычисления многчлена.
Синтаксический анализатор для распознавания и вычисления многчлена.
Работа со строками: смена кодировки, удаление тегов из HTML текста, обработка
Переименование файлов из кириллицы в латиницу.
Выдача контекстной подсказки.
Частотный словарь символов.
Подсчет повторяющихся символов в строке.
Ссылочные переменные:
Моделирование стека.
Пасьянс "Косынка".
Игры:
Пасьянс "Косынка".
Игра "Питон"
Игра "Анацефал". Пример использования объектов.
Игра "Минное поле"
Большие проекты:
Электронная картотека (без исходника)


 
Детская игра "Считалка"
В некотором файле находится список игроков. Необходимо выбрать ведущего игрока. Для этого выбирается произвольное число Н, игроки встают в круг и выкидывают из круга каждого Н-того игрока, пока не останется лишь один человек. Написать программу, печатающую вышедших в процессе рассчета игроков. Необходимо использовать динамические структуры данных (связанные списки).


program shitalka;
const nOut = 5;
type
  ptrNameList = ^nameList;
  nameList = record
    name:String;
    next:ptrNameList;
    end;
var firstElement,element:ptrNameList;
    f:text;
    nameString:String;
    i,nInList:byte;

procedure deleteElement(element2Del:ptrNameList);
var prevElement:ptrNameList;
    i:word;
  begin

  { find the element that is just before element2Del }
  prevElement := firstElement; i:=0;
  while ((prevElement^.next <> element2Del) and (i<nInList)) do
    begin
    prevElement := prevElement^.next; inc(i);
    end;

  { remove element2Del from list }
  prevElement^.next := element2Del^.next;
  if (element2Del=firstElement) then
    firstElement:=element2Del^.next;
  { print element2Del }
  writeln;writeln('removed: '+element2Del^.name);
  dispose(element2Del);
  dec(nInList);
  end;

procedure printList;
var element,lastEl:ptrNameList;
  k:byte;
  begin
  element := firstElement; k:=0;
  while (k<nInList) do
    begin
    write(element^.name+', '); inc(k);
    element := element^.next;
    end;
  {writeln('end of list');}
  end;


begin

{ reading list }

firstElement := nil;
assign(f,'list.txt');
{$I-}
reset(f); nInList:=0;
{$I+}
if (IOResult>0) then
  begin
  writeln('File list.txt not found.');halt;
  end;
while not eof(f) do
  begin
  readln(f,nameString);
  if (firstElement = nil) then
    begin
    new(element);
    firstElement := element;
    end
  else
    begin
    new(element^.next);
    element := element^.next;
    end; { end if }
  element^.name := nameString;
  element^.next := firstElement;
  inc(nInList);
  end; { end while }
close(f);

{ printing initial list }

element := firstElement;


write('Initial list:');
printList;

{ shchitalka start }

element := firstElement;

while (element^.next<>element) do
  begin
  { element := firstElement; } { discomment this statement if you want to start fromt the first }
  i:=0;
  while ((element^.next<>element) and (i<nOut-1)) do
    begin
    element := element^.next;
    inc(i);
    end;
  if (element^.next<>element) then
    begin
    deleteElement(element);
    write('Rest: ');
    printList;
    element := element^.next;
    end;
  end;

{ end of list reached }
end.




 

 

 

 

 

 



HOME