Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.11.2010, 16:28
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
Плохо Работа со строками

Нужно написать подпрограмму которая обеспечивает вывод в Мемо, в возрастающем порядке всех трехзначных целых чисел, в десятичной записи которых нет одинаковых цифр. Рекомендуется преобразовывать числа в строки и анализировать отдельные символы.
Ответить с цитированием
  #2  
Старый 06.11.2010, 17:15
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Нужна помощь в реализации этого задания
Ответить с цитированием
  #3  
Старый 06.11.2010, 17:48
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Переделайте вывод под Мемо:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Var
 i,n: Integer;
 s: String;
begin
 n := 1;
 for i := 100 to 999
 do begin
    s := IntToStr(i);
    if (s[1] in [s[2],s[3]]) or (s[2] in [s[1],s[3]]) or (s[3] in [s[2],s[1]])
    then Continue;
    Write(s:4);
    if n mod 18 = 0 then WriteLn;
    Inc(n);
    end;
 ReadLn;
end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 06.11.2010, 18:15
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

А вот с этим кодом?
Код:
procedure TfrmIntNumber.Button1Click(Sender: TObject);
var min,max,a:integer; s:string;
begin
 Memo1.Clear;
 max:=999;
 a:=100;
for min:=100 to max do
  begin
  s:=inttostr(a);
  a:=min+1;
  if ord(s[1])=ord(s[2]) and ord(s[2])=ord(s[3]) and ord(s[1])=ord(s[3]) then break
  else
  s:=s[1]+s[2]+s[3];
  Memo1.Lines.Add(s);
 end;
end;
Ошибка выскакивает о том что типы несовместимы в этой строке
Цитата:
if ord(s[1])=ord(s[2]) and ord(s[2])=ord(s[3]) and ord(s[1])=ord(s[3]) then break
Что нужно сделать/дописать?
Ответить с цитированием
  #5  
Старый 06.11.2010, 20:11
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Всегда or или and (в условии) надо заключать в скобки:
Код:
procedure TfrmIntNumber.Button1Click(Sender: TObject);
var min,max,a:integer; s:string;
begin
 Memo1.Clear;
 max:=999;
 a:=100;
for min:=100 to max do
  begin
  s:=inttostr(a);
  a:=min+1;
  if (ord(s[1])=ord(s[2])) and (ord(s[2])=ord(s[3])) and (ord(s[1])=ord(s[3])) then break
  else
  s:=s[1]+s[2]+s[3];
  Memo1.Lines.Add(s);
 end;
end;
__________________
Помогаю за Спасибо
Ответить с цитированием
  #6  
Старый 06.11.2010, 20:50
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

v1s2222, Спасибо за помощь в такой мелкой ошибке.
Что нужно дописать что б выводило только числа по условию задания?

Страдалецъ, Спасибо за старания.
Ответить с цитированием
  #7  
Старый 06.11.2010, 20:50
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

То что я вам дал, несколько отличается от вашего примера. Подумайте почему я использовал Continue а не Break.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 06.11.2010, 20:54
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

а если вместо = в моем коде использовать <> и поменять местами содержимое между then и else?
Ответить с цитированием
  #9  
Старый 06.11.2010, 20:55
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Правильно ли я написал процедуру leftstr или это функция?
Код:
procedure TfrmLeftStr.Button1Click(Sender: TObject);
var s,s1,s2:string; cnt:integer;
begin
 cnt:=strtoint(Edit2.Text);
 s:=Edit1.Text;
 s1:=Copy(s,1,cnt);
 Memo1.Lines.Add(s1);
end;

procedure TfrmLeftStr.FormCreate(Sender: TObject);
begin
 Edit1.Text:='';
 Edit2.Text:='';
 Memo1.Clear;
end;
Ответить с цитированием
  #10  
Старый 06.11.2010, 20:57
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Написание программы имеет мало общего с произвольной перестановкой строк и знаков. Если есть изменения в коде, приложит его к сообщению.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #11  
Старый 06.11.2010, 21:00
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Зачем так?
Код:
procedure TfrmLeftStr.Button1Click(Sender: TObject);
var s,s1,s2:string; cnt:integer;
begin
 cnt:=strtoint(Edit2.Text);
 s:=Edit1.Text;
 s1:=Copy(s,1,cnt);
 Memo1.Lines.Add(s1);
end;
Почему не сразу?:
Код:
procedure TfrmLeftStr.Button1Click(Sender: TObject);
begin
 Memo1.Lines.Add(Copy(Edit1.Text, 1, StrToInt(Edit2.Text)));
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 06.11.2010, 21:09
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Ну вообщем-то я код поменял немного, но от этого лучше не стало
Код:
procedure TfrmIntNumber.Button1Click(Sender: TObject);
var min,max,a:integer; s:string;
begin
 Memo1.Clear;
 max:=999;
 a:=100;
 s:=inttostr(a);
for min:=100 to max do
  begin
  if (ord(s[1])=ord(s[2])) and (ord(s[2])=ord(s[3])) and (ord(s[1])=ord(s[3])) then break
  else
  a:=min+1;
  s:=inttostr(a);
  if (ord(s[1])=ord(s[2])) and (ord(s[2])=ord(s[3])) and (ord(s[1])=ord(s[3])) then break
  else
  s:=s[1]+s[2]+s[3];
  Memo1.Lines.Add(s);
 end;
end;
Мне нужно написать изученными элементами эту программу.

Последний раз редактировалось flips, 06.11.2010 в 21:16.
Ответить с цитированием
  #13  
Старый 06.11.2010, 22:39
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Можете сказать почему сдесь не выполняются услови с if одновременно, а только первое?
Код:
procedure TfrmIntNumber.Button1Click(Sender: TObject);
var min,max,a:integer; s:string;
begin
 Memo1.Clear;
 max:=999;
for min:=100 to max do
 begin
 a:=100;
 s:=inttostr(a);
 if (ord(s[1])=ord(s[2])) and (ord(s[2])=ord(s[3])) and (ord(s[1])=ord(s[3])) then break
 else
  a:=min+1;
  s:=inttostr(a);
 if (ord(s[1])=ord(s[2])) and (ord(s[2])=ord(s[3])) and (ord(s[1])=ord(s[3])) then break
 else
  s:=s[1]+s[2]+s[3];
  Memo1.Lines.Add(s);
 end;
end;
Что нужно дописать/изменить чтобы условие выполнялось?
Ответить с цитированием
  #14  
Старый 06.11.2010, 23:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
var
  I : Integer;
  Buf : String;
begin
  Memo1.Lines.Clear;
  For I := 100 To 999 Do
    Begin
      Buf := IntToStr(I);
      If (Buf[1] <> Buf[2]) And (Buf[1] <> Buf[3]) And (Buf[2] <> Buf[3]) 
        Then Memo1.Lines.Add(Buf);
    End;
end;

И все. Непонятно из-за чего ломаются копья.
Конечно, это вариант с хардкодом - только трехзначные числа.
Ответить с цитированием
  #15  
Старый 06.11.2010, 23:36
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

lmikle, Спасибо большое, все оказалось намного проще, а я сидел ломал голову, ввел много переменных.
Страдалецъ, v1s2222, Вам большое спасибо за помощь и поддержку.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:25.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025