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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 07.09.2009, 22:08   #1
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию [Делфи]Самое маленькое число. Как вычислить?

Есть числа такого плана:

4120,9947,21,412,10,82.

(т.е. числа через запятую (токо числа ничего больше), а на конце точка)
Как программно на делфи вычислить самое маленькое число?
zotox вне форума
Старый 07.09.2009, 22:14   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Элементарно, Ватсон.
Код:
var
  S,S2: string;
  i:integer;
begin
  S:='234,555,333,123.';
  s2:='';
  i:=0;

  while length(S)<>0 do
  begin

    if s[1] in ['0'..'9'] then
      s2:=s2+s[1]
    else

    begin
      if strtoint(s2)<i then i:=strtoint(s2);
      s2:='';
    end;

    delete(s,1,1);
  end;
  ShowMessage(inttostr(i));
end;
Познавая других, мы познаем себя.
С'est la vie...

Последний раз редактировалось SuperVisor; 07.09.2009 в 22:21. Причина: Спят усталые игрушки, книжки спят...
SuperVisor вне форума
Старый 07.09.2009, 22:15   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

А ты загони эти числа в массив и отсортируй его по убыванию. Числа вводить так:
Код:
Var
NachalString, EscheString:String;
Massiv:Array of Integer;
N:Integer;
Begin
ReadLn(NachalString);
EscheString:=NachalString;
While Pos(EsheString,',')<>0 do
 Begin
   Inc(N);
   Delete(EsheString,Pos(EsheString,','), Length(EscheString)-Pos(EsheString,','));
 End;
SetLength(Massiv,N);
EscheString:=NachalString;
While Pos(EscheString,'.')<>1 Do
 {Дальше додумывай сам решение очень простое, аналогично тому, что я описал выше}
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 07.09.2009, 23:19   #4
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от SuperVisor Посмотреть сообщение
Элементарно, Ватсон.
Код:
var
  S,S2: string;
  i:integer;
begin
  S:='234,555,333,123.';
  s2:='';
  i:=0;

  while length(S)<>0 do
  begin

    if s[1] in ['0'..'9'] then
      s2:=s2+s[1]
    else

    begin
      if strtoint(s2)<i then i:=strtoint(s2);
      s2:='';
    end;

    delete(s,1,1);
  end;
  ShowMessage(inttostr(i));
end;
Пробывали? У меня выводится ноль почему то

Alex Cones уж слишком непонятно

Все еще актуально
zotox вне форума
Старый 08.09.2009, 05:30   #5
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Цитата:
Сообщение от zotox Посмотреть сообщение
Пробывали? У меня выводится ноль почему то
Все еще актуально
В отладке посмотреть "почему" слишком сложно?

Да, все просто. i := MaxInt, а не i := 0, потому как в этом случае условие strtoint(s2)<i никогда не выполняется (при положительных числах, как они есть в приведенной автором строке) и как вошли в цикл с i = 0, так и вышли с тем же значением.
Скандербег вне форума
Старый 08.09.2009, 08:43   #6
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
var
  S,S2: string;
  i:integer;
begin
  S:='234,555,333,123.';
  s2:='';
  i:=0;

  while length(S)<>0 do
  begin

    if s[1] in ['0'..'9'] then
      s2:=s2+s[1]
    else

    begin
      if i=0 then i:=strtoint(s2) else
      if strtoint(s2)<i then i:=strtoint(s2);
      s2:='';
    end;

    delete(s,1,1);
  end;
  ShowMessage(inttostr(i));
end;
SERG1980 вне форума
Старый 08.09.2009, 09:07   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Ребят, безусловно, код (с) SuperVisor c модификацией SERG1980 будет работать.
Почти... (как говорится - "программа работает в целом, прокалываясь на мелочах..." )

Прежде, просто брюзжание...
Но, зачем, вот объясните мне - ЗАЧЕМ - называть переменную, в которой мы храним минимальное значение i ?!
неужели MinValue или CurrentMin хуже?! но это ладно..

а вот, SERG1980, скажите, если я в строке напишу так:
Код:
  S:='12,10,0,777.';
Догадываетесь, какой ответ выдаст программа?!
Сообщаю - НЕВЕРНЫЙ!

А если в строке я напишу отрицательные числа, что будет?!
почему бы не завести счётчик чисел (ну, или булевскую переменную) и в MinValue записывать ПЕРВОЕ число из строки, а потом уже сравнивать остальные числа с ним...

реализацию не пишу. Потому как не сомневаюсь в способностях здесь присутствующих.
Serge_Bliznykov вне форума
Старый 08.09.2009, 09:37   #8
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

А всё просто, тут немного надо было придумать, чуть чуть не доглядели.
вобщем надо проверку ставить.
Код:
var
  S,S2: string;
  i:integer;
  pr:boolean;
begin
  S:='234,-555,0,123.';
  s2:='';
  pr:=true;

  while length(S)<>0 do
  begin

    if s[1] in ['0'..'9','-'] then
      s2:=s2+s[1]
    else

    begin
      if pr then begin i:=strtoint(s2); pr:=false end else
      if strtoint(s2)<i then i:=strtoint(s2);
      s2:='';
    end;

    delete(s,1,1);
  end;
  ShowMessage(inttostr(i));
end;
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 08.09.2009 в 15:30. Причина: флаг проверки на первое вхождение в процедуру
IliaIT вне форума
Старый 08.09.2009, 10:00   #9
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
Радость

Попробуй так:

Код:
Procedure TForm1.Button1Click(Sender: TObject);
 Const Stroka='100,2,500,-6,10,0,-100,-500,15,7';
 Var I,Min:Integer;
     S:String;
 Begin
  //Минимальное число по умолчанию
  Min:=0;
  //Проходим по всем символам строки
  For I:=1 To Length(Stroka) Do
   Begin
    //Если найден не допустимый символ то EXIT
    If Not (Stroka[I] In ['0'..'9','-',',']) Then Exit;
    //Если не разделитель то добавляем символ
    If Stroka[I]<>',' Then S:=S+Stroka[I]
    Else
     //Если символ разделитель
     Begin
      //Если в между разделителями нет числа то EXIT
      If (Length(S)=0) Or (S='-') Then Exit;
      //Если число меньше чем Min то Min=Число
      If StrToInt(S)<Min Then Min:=StrToInt(S);
      //Очищаем
      S:='';
    End;
 End;

 Label1.Caption:=IntToStr(Min)
End;
Никто не знает больше чем не знаю я
Nester вне форума
Старый 08.09.2009, 10:01   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Все тут чето обсуждают горячо... А мона и я тут выкидышем похвастаюсь?
Код:
  const s='4120,9947,210 412,100,82.';
  var e:string;kk,mn,k,i:integer;
begin                 mn:=MaxInt;
 i:=1; while i<=length(s) do begin
  if not (s[i] in ['0'..'9']) then begin
   val(e,k,kk);
   if mn>k then mn:=k;
   e:='';
  end else begin
   e:=e+s[i];
  end;
  inc(i);
 end;
 write(mn); Readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Код не звисит от разделителей, но рассчитан только на целые. Думаю это самый оптимальный из представленных.
I'm learning to live...
Stilet вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано действительное число а. Вычислить f(a) для функции f(x) Artem1987 Помощь студентам 11 11.11.2010 09:51
Pascal - Задано число n неизвестной разрядности. Вычислить сколько цифр в этом числе Виолетта Помощь студентам 2 18.03.2009 07:17
Дано действительное число х. Вычислить Incognitoal Помощь студентам 7 09.03.2009 12:27
заменить самое длинное слово, на самое короткое в Delphi сер4ей Помощь студентам 5 05.03.2009 18:40
В целочисленном массиве найти самое часто повторяющееся число Алена Помощь студентам 2 01.11.2007 19:46