Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2013, 23:03   #1
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию Указатели

Код:
type
  Tp = ^Sp;
  Sp = record
  inf : Byte;
  link : Tp;
end;

var
  Form1: TForm1;
  head, tail, tmp, tmp2 :tp;
  i, n, k :Byte;
  mas:array[0..10000]of boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Code:integer;
begin
val(Edit1.Text,n,Code);
if Code<>0 then Edit3.Text:='invalid';
val(Edit2.Text, k, Code);
if Code<>0 then Edit3.Text:='invalid';
  if head = nil then
    begin
      new (head);
      head.inf:=1;
      head.link:=nil;
      tail:=head;
    end;

  for i:=2 to n do
    begin
      New (tmp);
      tmp.inf:=i;
      tmp.link:=nil;
      tail.link:=tmp;
      tail:=tmp;
    end;

    tail.link:=head;

   while tmp.link<>tmp do
   begin
     for i:=1 to k-1 do
        tmp:=tmp.link;
        tmp2:=tmp.link;
        tmp.link:=tmp2.link;
        Dispose(tmp2);
   end;

    Edit3.Text:=IntToStr(tmp.inf);
    head:=nil;
end;
Эта программа реализует считалку. Типа 5 человек и вылетает каждый 8-й например, остается один. Вот она и вычисляет победителя.

Проблема в том, что я не могу понять немного как она реализована. Я читал про указатели, но не понял . Разве что элементарное понял. Я не могу эти знания применить к этой программе.
Кто то может объяснить построчно что и как и зачем?
viks1 вне форума Ответить с цитированием
Старый 16.04.2013, 23:20   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

вы сами поясните, а тут поправят, если неправильно
eval вне форума Ответить с цитированием
Старый 16.04.2013, 23:36   #3
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
вы сами поясните, а тут поправят, если неправильно
Код:


type
  Tp = ^Sp; // указатель на такой тип данных 
  Sp = record // тип данных такой
  inf : Byte; // указатель типа байт что ли(не понял)
  link : Tp; // это область в памяти (ячейка) я хз))
end;

var
  Form1: TForm1;
  head, tail, tmp, tmp2 :tp; // переменные указатели типа Тр
  i, n, k :Byte; //обычные переменные
  mas:array[0..10000]of boolean; //массив с нулями и единицами

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Code:integer;
begin
val(Edit1.Text,n,Code);
if Code<>0 then Edit3.Text:='invalid'; // проверка на правельность вводимых данных(без символов что бы)
val(Edit2.Text, k, Code);
if Code<>0 then Edit3.Text:='invalid'; //аналогично для второго поля
  if head = nil then // если голова указателя пустая то делаем следующее
    begin
      new (head); //создаем голову
      head.inf:=1; // теперь ячейка inf= 1(тоже не понял)
      head.link:=nil; // а голову с ячейкой link делаем пустой что ли(тоже не понял)

      tail:=head; // теперь в tail хранится сформированная голова
    end;

  for i:=2 to n do // от 2-ки почему? потому что в голове есть 1-??
    begin
      New (tmp); // создаем тело
      tmp.inf:=i;  // заполняем тело 2,3,4, и тд до н
      tmp.link:=nil; // опять почему то пусто
      tail.link:=tmp; // это мы хранили для тела что бы голове присвоить тело?
      tail:=tmp; // ну вот, голова и тело вместе
    end;

    tail.link:=head; // теперь кусочку телу присваиваем голову( вот тут я ничего не понял)

   while tmp.link<>tmp do // тут происходит отбор 
   begin
     for i:=1 to k-1 do // до количество слов
        tmp:=tmp.link;
        tmp2:=tmp.link;// временная ячейка что ли
        tmp.link:=tmp2.link;// пере присваивание
        Dispose(tmp2); // очищаем временную ячейку 
   end;

    Edit3.Text:=IntToStr(tmp.inf); // после всего выводим я не знаю как оно там окозалось
    head:=nil; // обнуляем голову
end;
вот так я понял.
viks1 вне форума Ответить с цитированием
Старый 17.04.2013, 00:55   #4
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

правильно или нет?
viks1 вне форума Ответить с цитированием
Старый 17.04.2013, 01:06   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

нет, вы вообще представляете что такое указатель?
eval вне форума Ответить с цитированием
Старый 17.04.2013, 01:14   #6
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
нет, вы вообще представляете что такое указатель?
я думаю что это адрес на ячейку в памяти
viks1 вне форума Ответить с цитированием
Старый 17.04.2013, 01:18   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

http://informatics.mccme.ru/moodle/m...iew.php?id=535
Вот тут, вроде, доходчиво написано.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
указатели novak3 Общие вопросы C/C++ 6 27.05.2011 20:47
Указатели в С++. Solnze2 Помощь студентам 1 21.05.2011 15:57
указатели Narim Общие вопросы C/C++ 10 06.04.2011 20:01
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39