Часовой пояс: UTC + 3 часа




Куратор(ы):   Lord_of_Darkness   



Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 18 из 50<  1 ... 15  16  17  18  19  20  21 ... 50  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 
Прилепленное (важное) сообщение

Убедительная просьба ко всем, кто выкладывает исходники:
1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы

Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!

Прежде чем задать вопрос, воспользуйтесь учебником


Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь

Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36



Партнер
 

Member
Статус: Не в сети
Регистрация: 13.01.2006
Откуда: Rostov-On-Don
Необходимо решить задачу. Времени в обрез. Нужна помощь.
Условие:
Автоматизированная информационная система на ж\д вокзале содержит сведения об отправлении поездов дальнего следования. Для каждого поезда указывается: номер поезда, станция назначения и время отправления. Данные в информационной системе организованы в виде дерева. Составить программу которая:
1. Обеспечивает первоначальный ввод данных в информационную систему и формирование двоичного дерева.
2. Производит вывод всего дерева.
3. Получает номер поезда и выводит все данные об этом поезде.
4. Получает название станций назначения и выводит данные о всех поездах следующих до этой станции.

Программу желательно решить в Паскале, в крайнем случае в Delphi.

_________________
It`s Better To Reign In Hell Than Serve In Heaven.


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
viger
Код:
program BinTree;

uses crt;

type
  TreePointer = ^tree;
  TData = record
      TrainNumber: word; // номер поезда
      Station: string;   // станция назначения
      LeaveTime: record  // время отправления
        hour, min: word;
      end;
    end;
  tree = record
    data: TData;
    left: TreePointer; // Указатель на левое поддерево
    right:TreePointer; // Указатель на правое поддерево
  end;

// Добавление элемента
Procedure InsTree(var ANode : TreePointer; ldata : TData);
Begin
  if ANode = nil then
     Begin
       new(ANode);
       With ANode^ do
          Begin
            Left := nil;
            Right := nil;
            Data := ldata;
          end;
     end
  else if ldata.TrainNumber < ANode^.Data.TrainNumber then InsTree(ANode^.Left, ldata) else InsTree(ANode^.Right, ldata);
End;

// Вывод дерева
procedure PrintTree(ANode: TreePointer);
begin
  if ANode <> nil then
  Begin
    PrintTree(ANode^.Left);
    WriteLn('Train №',ANode^.Data.TrainNumber,' station: ',ANode^.Data.Station,' time: ',ANode^.Data.LeaveTime.Hour,':',ANode^.Data.LeaveTime.Min);
    PrintTree(ANode^.Right)
  End;
end;

// Поиск элемента по номеру поезда
procedure SearchTrainNumber(ANode: TreePointer; TrainNumber: word);
begin
  if ANode <> nil then
  Begin
    if TrainNumber=ANode^.data.TrainNumber then
        WriteLn('Train №',ANode^.Data.TrainNumber,' station: ',ANode^.Data.Station,' time: ',ANode^.Data.LeaveTime.Hour,':',ANode^.Data.LeaveTime.Min)
    else
    begin
        if TrainNumber<ANode^.data.TrainNumber then
            SearchTrainNumber(ANode^.left,TrainNumber)
        else SearchTrainNumber(ANode^.right,TrainNumber);
    end;
  end;
end;

// Поиск элемента по станции назначения
procedure SearchStation(ANode: TreePointer; Station: string);
begin
  if ANode <> nil then
  Begin
    SearchStation(ANode^.Left,Station);
    if Station=ANode^.Data.Station then
       WriteLn('Train №',ANode^.Data.TrainNumber,' station: ',ANode^.Data.Station,' time: ',ANode^.Data.LeaveTime.Hour,':',ANode^.Data.LeaveTime.Min);
    SearchStation(ANode^.Right,Station)
  End;
end;

var
  Root: TreePointer;
  dat: TData;
  index: byte;
  number: word;
  station: string;

begin
  repeat
   clrscr;
   writeln('select action:');
   writeln('1. input data');
   writeln('2. output tree');
   writeln('3. search train by number');
   writeln('4. search train by station');
   writeln('0. exit');
   writeln;
   write('Your choice: ');
   readln(index);
   case index of
     1: begin
          write('TrainNumber: ');
          readln(dat.TrainNumber);
          write('Station: ');
          readln(dat.Station);
          write('LeaveTime hour: ');
          readln(dat.LeaveTime.hour);
          write('LeaveTime min: ');
          readln(dat.LeaveTime.min);
          InsTree(Root, dat);         
        end;
     2: begin PrintTree(root); end;
     3: begin
          write('Train number: ');
          readln(number);
          writeln('Find:');
          SearchTrainNumber(root, number);
        end;
     4: begin
          write('Station: ');
          readln(station);
          SearchStation(root,station);
        end;
   end;
  until index = 0;
end.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 13.01.2006
Откуда: Rostov-On-Don
Lord_of_Darkness Огромное спасибо. Нет слов. :beer:

_________________
It`s Better To Reign In Hell Than Serve In Heaven.


 

Member
Статус: Не в сети
Регистрация: 08.12.2005
Откуда: Smolensk
Кто-нибудь поможет упростить алгоритм вывода всех простых исел от 1 до N...(преподу не понравилось, как тут решено, она говорит как-то через корень N исчится простые числа :?: ):
Код:
uses crt;
var i,n:integer;
    f:boolean;
    j:integer;
begin
clrscr;
 f:=true;
  write('vvedite chislo n = ');
    readln (n);
for i:=1 to n do
begin
  f:=true;
  for j:=2 to i-1 do
    if i mod j = 0
       then f:=false;
  if f
     then write (i,'  ');
end;
readln
end.

_________________
Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Когда-то тут была ссылка, но она была очень большая :)

_________________
Ку ку


Последний раз редактировалось Daemon 07.06.2006 19:20, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 08.12.2005
Откуда: Smolensk
Daemon
Причем тут числа Мерсена...

_________________
Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Rev@n блин, 2^n - 1, вот причем. 2^n естественно ненужно пересчитывать на каждой итерации, а постоянно накапливать.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 08.12.2005
Откуда: Smolensk
Daemon
Я же писал, что мне надо найти как-то через √n ...

_________________
Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Rev@n скажи преподу, чтобы сам его через квадратный корень искал :D Числа Мерсера - один из самых быстрых способов, и то, полученое число еще нужно проверять на простоту по алгоритму Милера-Рабена, или тот, что в Prime95 используется.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 08.12.2005
Откуда: Smolensk
Daemon писал(а):
скажи преподу, чтобы сам его через квадратный корень искал

У меня судьба зачета решается...

_________________
Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Rev@n попробуй делать так - если квадратный корень из числа целый - то оно однозначно не простое, если число четное - то оно также простым являться не может. Это значительно сократит объем вычислений.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 08.12.2005
Откуда: Smolensk
Lord_of_Darkness
А не поможете ли все это реализовать... :oops:

_________________
Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Rev@n
Код:
uses crt;
var i,n:integer;
    f:boolean;
    j:integer;
    eps: real; // погрешность
begin
clrscr;
 f:=true;
 eps:=0.000001;
  write('vvedite chislo n = ');
    readln (n);
for i:=1 to n do
begin
 if not ((n mod 2) = 0) and not ((sqrt(n)-trunc(sqrt(n)))<eps) then ////////// new
 begin                    //////////
  f:=true;
  for j:=2 to i-1 do
    if i mod j = 0
       then f:=false;
  if f
     then write (i,'  ');
 end; ////////////////////////  new
end;
readln
end.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 08.12.2005
Откуда: Smolensk
Спасибо... #77

_________________
Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|


 

Member
Статус: Не в сети
Регистрация: 18.03.2004
Откуда: СПб
Rev@n писал(а):
Кто-нибудь поможет упростить алгоритм вывода всех простых исел от 1 до N...(преподу не понравилось, как тут решено, она говорит как-то через корень N исчится простые числа :?: ):

Вообще-то такая задача ГОРАЗДО быстрее решается решетом Эратосфена:
Код:
const maxn = 10000;
var arr: array[1..maxn] of boolean;
     i,j,n,sq:integer;
begin
 readln(n);
 sq:=trunc(sqrt (n));
 for i:=2 to n do arr[i]:=true;
 arr[1] = false;

 for i:=2 to sq do
  if arr[i] then begin
   j:=i*i;
   repeat
    arr[j]:=false;
    j:=j+i;
   until j>n;
  end;
end.

в результате в массиве arr true - это простые числа.


 

Member
Статус: Не в сети
Регистрация: 21.10.2003
Откуда: Брест
Фото: 47
Rev@n ты это глядел? http://forums.overclockers.ru/viewtopic ... 99#1837099
Добавлено спустя 3 минуты, 25 секунд
хотя, это тоже что и Pyroman написал

_________________
А ещё недавно ждали AMD Steamroller на AM3+


 

Member
Статус: Не в сети
Регистрация: 18.03.2004
Откуда: СПб
AlexZerg писал(а):
хотя, это тоже что и Pyroman написал

То что написано по той ссылке, которую ты дал, и то что что написал я, это СОВЕРШЕННО разные алгоритмы!
Решето значительно быстрее, зато требует лишнюю память.
Твой вариант работает за n * sqrt (n), а решето за n * log(log(n)).


 

Member
Статус: Не в сети
Регистрация: 08.12.2005
Откуда: Smolensk
Pyroman AlexZerg
Спасибо, конечно всем, но мне надо было находить как сказал препод (ей не надо быстрей, просто она хотела проверить знаю ли я :P ) через корень n, как сделал Lord_of_Darkness

_________________
Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
может хватит флеймить?

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Люди помогите плз. надо срочно сделать задачу для курсовой:

В двумерном массиве А размерности MxN изменить значения элементов, лежащих ниже горизонтальной оси, таким образом,
чтобы массив стал симметричен относительно указанной оси. Упорядочить также верхнюю половину преобразованного массива по возрастанию, а нижнюю по убыванию первых элементов строк матрицы. Для выполнения отдельных операций разработать подпрограммы.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 18 из 50<  1 ... 15  16  17  18  19  20  21 ... 50  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan