![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Нужно написать подпрограмму которая обеспечивает вывод в Мемо, в возрастающем порядке всех трехзначных целых чисел, в десятичной записи которых нет одинаковых цифр. Рекомендуется преобразовывать числа в строки и анализировать отдельные символы.
|
|
#2
|
|||
|
|||
|
Нужна помощь в реализации этого задания
|
|
#3
|
||||
|
||||
|
Переделайте вывод под Мемо:
Код:
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
|
|||
|
|||
|
А вот с этим кодом?
Код:
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; Цитата:
|
|
#5
|
||||
|
||||
|
Всегда 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
|
|||
|
|||
|
v1s2222, Спасибо за помощь в такой мелкой ошибке.
Что нужно дописать что б выводило только числа по условию задания? Страдалецъ, Спасибо за старания. |
|
#7
|
||||
|
||||
|
То что я вам дал, несколько отличается от вашего примера. Подумайте почему я использовал Continue а не Break.
|
|
#8
|
|||
|
|||
|
а если вместо = в моем коде использовать <> и поменять местами содержимое между then и else?
|
|
#9
|
|||
|
|||
|
Правильно ли я написал процедуру 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
|
||||
|
||||
|
Написание программы имеет мало общего с произвольной перестановкой строк и знаков. Если есть изменения в коде, приложит его к сообщению.
|
|
#11
|
||||
|
||||
|
Зачем так?
Код:
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
|
|||
|
|||
|
Ну вообщем-то я код поменял немного, но от этого лучше не стало
Код:
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
|
|||
|
|||
|
Можете сказать почему сдесь не выполняются услови с 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
|
|||
|
|||
|
Код:
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
|
|||
|
|||
|
lmikle, Спасибо большое, все оказалось намного проще, а я сидел ломал голову, ввел много переменных.
Страдалецъ, v1s2222, Вам большое спасибо за помощь и поддержку. |