Помощь - Поиск - Пользователи - Календарь
Полная версия: Какой оптимальный алгоритм ?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
mrVoodoo
вот понадобилось написать программу для перевода из стринг в интегер, сразу скажу что в стринг тока циферки.

вот что мне пришло первое в голову:

var
a:string;
b,i,y,v:integer;
begin
readln(a);
{ввели число}
for i:= length(a) downto 1 do (*начало цикла который будет перебирать все цифры чмсла в обратном порядке*)
begin
y:=exp(ln(10)*i);
(*возводим 10 в степень i*)
w:=w+1; (*это типа ещё одного цикла но тока он считает в обратном порядке*)
v:=ord(a[w])-ord(0); (*ну вот собственно превращение, из кода нужной цифры вычитаем код нуля и выходит нужная цифра, но уже в интегере*)
b:=b+(v*y); (*создаём само число, постепенно прибавляя к нему наименьшее, т.е. 1000+300+80+5*)
end;



ну вот так этот код выглядет более рабочим, но если его использовать в больших задачах типа :

Код
Таймер.

Таймер - это часы, которые умеют подавать звуковой сигнал по прошествии некоторого периода времени. Напишите программу, которая определяет, когда должен быть подан звуковой сигнал.
Формат входных данных
В первой строке входного файла записано текущее время в формате ЧЧ:ММ:СС (с ведущими нулями). При этом оно удовлетворяет ограничениям: ЧЧ - от 00 до 23, ММ и СС - от 00 до 60.
Во второй строке записан интервал времени, который должен быть измерен. Интервал записывается в формате Ч:М:С (где Ч, М и С - от 0 до 109, без ведущих нулей). Дополнительно если Ч=0 (или Ч=0 и М=0), то они могут быть опущены. Например, 100:60 на самом деле означает 100 минут 60 секунд, что то же самое, что 101:0 или 1:41:0. А 42 обозначает 42 секунды. 100:100:100 - 100 часов, 100 минут, 100 секунд, что то же самое, что 101:41:40.
Формат выходных данных
В выходной файл выведите в формате ЧЧ:ММ:СС время, во сколько прозвучит звуковой сигнал. При этом если сигнал прозвучит не в текущие сутки, то дальше должна следовать запись +<кол во> days. Например, если сигнал прозвучит на следующий день - то +1 days.
Примеры
a.in
01:01:01
48:0:0
a.out
01:01:01+2 days
a.in
01:01:01
58:119
a.out
02:01:00
a.in
23:59:59
1
a.out
00:00:00+1 days



то что тогда ? неужели нет нечего лучше?


P.S.
далее я начал писать программу для задачи выше (смотрите прикреплённые файлы), но вылезла ошибка (скрин прикрепил), я не знаю как её исправить, кто поможет тому огромное спасибо!
я не писал коменты в проге, так что вы её не поймёте просто помогите найти ошибку.

Добавлено через 3 мин.
исправил опечатку в примере, сильно не придерайтесь я этот пример тока что написал, чтоб объяснить принцип того что надо.
volvo
Цитата
я не писал коменты в проге, так что вы её не поймёте просто помогите найти ошибку.
Ошибку, извини, показывает тебе компилятор... Не НАМ, а ТЕБЕ, потому как где у тебя в это время находится курсор - видно ТЕБЕ, но его нет на скрине...

Google -> "форум телепатов", там тебе смогут помочь...

Что касается перевода строки в число - то вообще-то есть стандартная процедура Val, но если хочется свой самокат, то конечно можно и состряпать...
mrVoodoo
volvo, курсор на скрине видно ... специально сделал так скрин smile.gif

y:=exp(ln(10)*i); курсор ...

и это тока поскриптум, а поподробней про val, моно?

Добавлено через 14 мин.
спасибо, что подсказал про val, гугля помог ввв.pascaler.ru/pascal/lines/lines_4.html за рекламу тока не сочтите.

остался постскриптум ...
Lapp
Цитата(mrVoodoo @ 26.11.2007 21:34) *
остался постскриптум ...
Путано ты изъясняешься, однако.. Но если тебе еще нужно про ошибку, то ты пытаешься присвоить значение типа real величине типа integer. Это просто так делать нельзя. Для этого есть специальные функции:

Function Round (R: Real) : LongInt Округляет значение R вещественного типа до ближайшего целого.
Function Trunc(R: Real): LpngInt Усекает значение вещественного типа до значения типа LongInt путем отбрасывания дробной части.

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

__________________________
тему моно клоуз.

P.S. задачка то олимпиадная .
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.