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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2014, 13:10   #1
Dynn
Новичок
Джуниор
 
Аватар для Dynn
 
Регистрация: 12.05.2014
Сообщений: 2
По умолчанию Почему Val возвращает 0 & 0?

Процедура ищет в строке s первые символы <> пробелу, запоминает их в s2 и удаляет эту подстроку. Процедурой Val s2 необходимо перевести в numb. Но не могу понять, почему при любых введенных значениях она возвращает 0 и 0. то есть ошибка в нулевом символе? О_о и в каком модуле вообще добыть можно код Val'а?


Код:
uses crt;
procedure NextNumber(s:string; numb:integer);{находит в строке
                                                           следующее число}
  var i,nach,kon,e:integer;  s2:string; f:boolean;
 begin
    f:=true;
    for i:=1 to length(S) do        {проверка строки, если состоит из}
     if s[i]<>' ' then f:=false;     {пробелов или пустая, то numb=-16}
    nach:=0; kon:=0; i:=0;
    s:=' ' + s + ' ';
    while (nach=0) or (kon=0) do begin
        i:=i+1;
        if (s[i]=' ') and (s[i+1]<>' ') then nach:=i+1;
        if (s[i]<>' ') and (s[i+1]=' ') then kon:=i;
                                            end;
    s2:=copy(s,nach,(kon-nach+1)); writeln(s2); readln;
    delete(s,1,kon+1); writeln(s); readln;
    if s2='-' then nextnumber(s,numb) else 
        val(s2, numb,e);
    if (f) or (s='') then numb:=-16;
 end;

var s:string; numb,e:integer;

begin     readln(s); nextnumber(s,numb);
            writeln(numb,'  ',e); readln;
            end.
Dynn вне форума Ответить с цитированием
Старый 12.05.2014, 13:14   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

не проверял, но вижу, что Вы значение numb не возвращаете!

попробуйте, для начала:
Код:
procedure NextNumber(s:string; var numb:integer);{находит в строке
                                                           следующее число}

Цитата:
Код:
writeln(numb,'  ',e);
p.s. если Вы хотите использовать переменную e - то её тоже нужно возвращать из процедуры.
иначе она у Вас всегда будет равна нулю.

Последний раз редактировалось Serge_Bliznykov; 12.05.2014 в 13:17.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2014, 13:35   #3
Dynn
Новичок
Джуниор
 
Аватар для Dynn
 
Регистрация: 12.05.2014
Сообщений: 2
По умолчанию

о боги, и из-за этого париться столько времени.....
спасибо
Dynn вне форума Ответить с цитированием
Старый 12.05.2014, 14:07   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

не за что.

p.s. обратите внимание, что если Вы собираетесь использовать функцию в цикле, то Вам, скорее всего, строку тоже надо будет объявить в параметрах через var (я код не разбирал, но Вы там, по-моему, удаляете обработатнное число).

p.p.s. рекомендую Вам (ещё раз) перечитать теорию - чем процедура отличается от функции, что такое формальные и фактические параметры процедуры/функции.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему не возвращает? Praud Помощь студентам 4 16.12.2013 14:17
Почему _kbhit возвращает TRUE при отсутствии нажатий? Catharsis Общие вопросы C/C++ 3 01.08.2010 17:40
Почему DialogBox возвращает (-1) ? vassel Общие вопросы C/C++ 5 17.01.2010 23:30
TForm & TImage & PNG & Прозрачность delphi_beginner Общие вопросы Delphi 7 19.09.2009 08:46
Почему функция не возвращает никакое значение? Тупой Общие вопросы Delphi 1 31.05.2009 17:31