Убедительная просьба ко всем, кто выкладывает исходники: 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;
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
Статус: Не в сети Регистрация: 08.12.2005 Откуда: Smolensk
Daemon Причем тут числа Мерсена...
_________________ Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|
Member
Статус: Не в сети Регистрация: 08.12.2005 Откуда: Smolensk
Daemon Я же писал, что мне надо найти как-то через √n ...
_________________ Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Rev@n скажи преподу, чтобы сам его через квадратный корень искал Числа Мерсера - один из самых быстрых способов, и то, полученое число еще нужно проверять на простоту по алгоритму Милера-Рабена, или тот, что в Prime95 используется.
Member
Статус: Не в сети Регистрация: 08.12.2005 Откуда: Smolensk
Daemon писал(а):
скажи преподу, чтобы сам его через квадратный корень искал
У меня судьба зачета решается...
_________________ Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|
Куратор темы Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
Rev@n попробуй делать так - если квадратный корень из числа целый - то оно однозначно не простое, если число четное - то оно также простым являться не может. Это значительно сократит объем вычислений.
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Member
Статус: Не в сети Регистрация: 08.12.2005 Откуда: Smolensk
Lord_of_Darkness А не поможете ли все это реализовать...
_________________ Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|
Куратор темы Статус: Не в сети Регистрация: 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
Статус: Не в сети Регистрация: 18.03.2004 Откуда: СПб
AlexZerg писал(а):
хотя, это тоже что и Pyroman написал
То что написано по той ссылке, которую ты дал, и то что что написал я, это СОВЕРШЕННО разные алгоритмы!
Решето значительно быстрее, зато требует лишнюю память.
Твой вариант работает за n * sqrt (n), а решето за n * log(log(n)).
Member
Статус: Не в сети Регистрация: 08.12.2005 Откуда: Smolensk
PyromanAlexZerg Спасибо, конечно всем, но мне надо было находить как сказал препод (ей не надо быстрей, просто она хотела проверить знаю ли я ) через корень n, как сделал Lord_of_Darkness
_________________ Вам может показаться, что я повторяюсь, но я буду распоряжаться вашими жизнями, как мне вздумается. Постарайтесь этого не забывать...
|Клан Дедов|
Люди помогите плз. надо срочно сделать задачу для курсовой:
В двумерном массиве А размерности MxN изменить значения элементов, лежащих ниже горизонтальной оси, таким образом,
чтобы массив стал симметричен относительно указанной оси. Упорядочить также верхнюю половину преобразованного массива по возрастанию, а нижнюю по убыванию первых элементов строк матрицы. Для выполнения отдельных операций разработать подпрограммы.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения