Форум: "Прочее";
Текущий архив: 2014.09.07;
Скачать: [xml.tar.bz2];
ВнизВаш вариант реализации FizzBuzz на Delphi? Найти похожие ветки
← →
FizzBazz (2014-02-04 17:01) [0]Для тех, кто не в курсе
"Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz»"
Очень хочется посмотреть. Свой, конечно, тоже покажу, но попозже
← →
ВладОшин © (2014-02-04 17:08) [1]writeln("1");
writeln("2");
..
в общем "зобанят" боюсь :))
← →
Дмитрий СС (2014-02-04 17:21) [2]
> Свой, конечно, тоже покажу, но попозже
Какой хитрый школьник))
← →
Inovet © (2014-02-04 17:28) [3]> [0] FizzBazz (04.02.14 17:01)
> При этом вместо чисел, кратных трем, программа должна выводить
> слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz».
> Если число кратно и 3, и 5, то программа должна выводить
> слово «FizzBuzz»«
Неправильно. Число кратно 3 — должна выводить „Тройка“, кратно 7 — „Семёрка“, кратно 1 — „Туз“. Если число кратно 3, 7, 1 — „Пиковая дама“.
В версии Пелевина 3 и 4 — „ослик 15 центов“.
← →
Inovet © (2014-02-04 17:40) [4]> [3] Inovet © (04.02.14 17:28)
> 3 и 4 — „ослик 15 центов“.
7 же центов
← →
Дмитрий СС (2014-02-04 17:45) [5]На дельфи же программа нужна:
procedure TForm1.Button1Click(Sender: TObject);
var
C: TCanvas;
I: Integer;
A, B: Integer;
begin
Refresh;
Canvas.Brush.Style := bsClear;
A := 3;
B := 5;
for I := 1 to 100 do
begin
Canvas.Font.Color := clBlack;
Canvas.TextOut(10 + 15 * I, 10 + 15 * I, IntToStr(I));
Canvas.Font.Color := clRed;
if (I = A) and (I = B) then
begin
Canvas.TextOut(10 + 15 * I, 10 + 15 * I, "FizzBuzz");
Inc(A, 3);
Inc(B, 5);
end
else if I = A then
begin
Canvas.TextOut(10 + 15 * I, 10 + 15 * I, "Fizz");
Inc(A, 3);
end
else if I = B then
begin
Canvas.TextOut(10 + 15 * I, 10 + 15 * I, "Buzz");
Inc(B, 5);
end;
end;
end;
← →
FizzBazz (2014-02-04 17:47) [6]>> Какой хитрый школьник))
Спасибо за комплимент, конечно, но ты ошибся лет эдак на 20.
← →
FizzBazz (2014-02-04 17:55) [7]>> Дмитрий СС (04.02.14 17:45) [5]
Вот именно это и имеется в виду. Это хреновое решение.if (I = A) and (I = B) then
не нужно, это лишнее сравнение, которое для решения задачи не нужно.
← →
Дмитрий СС (2014-02-04 18:00) [8]Тебе не угодишь:))
← →
Inovet © (2014-02-04 18:27) [9]> [7] FizzBazz (04.02.14 17:55)
> не нужно, это лишнее сравнение
for i := 1 to 20 do begin
if (i mod 3) = 0 then
Write("Oslik ")
else if (i mod 4) = 0 then
Write("Sem Centov ")
else begin
Write(i);
Write(" ");
end;
end;
← →
FizzBazz (2014-02-04 18:40) [10]>> Inovet © (04.02.14 18:27) [9]
Ну начнем с того, что при i = 1 напишет Oslik, хотя оно вовсе не кратно 3.
Дальше тоже неправильно, но уже пофиг
← →
FizzBazz (2014-02-04 18:45) [11]>> FizzBazz (04.02.14 18:40) [10]
>>Inovet © (04.02.14 18:27) [9]
А не, это я гоню. У тебя не работает, если i кратно и 3 и 5
← →
Пронин (2014-02-04 18:56) [12]Как-то так:
For i:= 1 to 100 do
If (i div 3 = 0) and (i div 5 = 0) then Writeln("FizzBuzz") else
If (i div 3 = 0) then Writeln("Fizz") else
If (i div 5 = 0) then Writeln("Buzz") else
Writeln(i);
← →
Inovet © (2014-02-04 19:03) [13]> [11] FizzBazz (04.02.14 18:45)
> если i кратно и 3 и 5
3 и 4. Ну тогда ещё одно сравнение
for i := 1 to 100 do begin
if i mod 12 = 0 then
Write("OslikSemCentov")
else if i mod 3 = 0 then
Write("Oslik")
else if i mod 4 = 0 then
Write("SemCentov")
else
Write(i);
Write(" ");
end;
← →
Слава Пестов1 (2014-02-04 19:08) [14]Более элегантного и оптимального решения не найдете:
flag: Boolean;
for i := 1 to 100 do begin
flag := false;
if (i mod 3) = 0 then begin
Write("fizz");
flag := true;
end;
if flag then begin
if (i mod 5) = 0 then Writeln("buzz");
end else if (i mod 5) = 0 then begin
Writeln("buzz");
flag := true;
end;
if not flag Writeln(i);
end;
← →
а в гугл заглянуть? (2014-02-04 21:50) [15]for i := 1 to 100 do begin
if (i mod 3) = 0 then s:="Fizz" else s:="";
if (i mod 5) = 0 then s:=s+"Buzz";
if s="" then s:=IntToStr(i);
Writeln(s);
end;
← →
Игорь Шевченко © (2014-02-04 21:52) [16]Хорошая статья, полезная.
← →
asail © (2014-02-04 21:55) [17]
> Игорь Шевченко © (04.02.14 21:52) [16]
> Хорошая статья, полезная.
Какая статья?
← →
а в гугл заглянуть? (2014-02-04 22:00) [18]это было элегантное, а вот оптимальное:
const
m3: array[0..2] of byte = (1, 0, 0);
m5: array[0..4] of byte = (2, 0, 0, 0, 0);
st: array[0..3] of string[8] = ("", "Fizz", "Buzz", "FizzBuzz");
for i := 1 to 100 do begin
f := m3[i mod 3] or m5[i mod 5];
if f = 0 then Writeln(i) else Writeln(st[f]);
end;
← →
ШАША (2014-02-04 22:23) [19]
> а в гугл заглянуть? (04.02.14 22:00) [18]
>
> это было элегантное, а вот оптимальное:
m3 и m5 это что?
← →
Игорь Шевченко © (2014-02-04 22:25) [20]asail © (04.02.14 21:55) [17]
http://habrahabr.ru/post/111843/
← →
Rouse_ © (2014-02-04 22:32) [21]
> Игорь Шевченко © (04.02.14 22:25) [20]
Это уже слишком сложный этап, очень многие из начинающих отсеиваются на вопросе: "чем отличается функция от процедуры?" :)
Да даже и некоторые из "не начинающих" засыпаются на такой вот банальности :)
← →
а в гугл заглянуть? (2014-02-04 22:37) [22]> m3 и m5 это что?
typed constants (типизированные константы)
← →
Зануда (2014-02-04 23:03) [23]>а в гугл заглянуть?
Гляжу в гугл - вижу фак. В смысле - не работает:
>[DCC Error] Unit5.pas(34): E2038 Illegal character in input file: """ (#$22)
потом:
---------------------------
Debugger Exception Notification
---------------------------
Project Project5.exe raised exception class EInOutError with message "I/O error 105".
---------------------------
Break Continue Help
---------------------------
← →
oldman © (2014-02-04 23:20) [24]
> FizzBazz (04.02.14 17:01)
> Для тех, кто не в курсе
>
> "Напишите программу, которая выводит на экран числа от 1
> до 100. При этом вместо чисел, кратных трем, программа должна
> выводить слово «Fizz», а вместо чисел, кратных пяти — слово
> «Buzz». Если число кратно и 3, и 5, то программа должна
> выводить слово «FizzBuzz»"
a[1]:=1
a[2]:=2
a[3]:="Fizz"
a[4]:=4
a[5]:="Buzz"
...
a[98]:=98
a[99]:="Fizz"
a[100]:="Buzz"
А потом печатаем весь массив
← →
Inovet © (2014-02-04 23:24) [25]> [24] oldman © (04.02.14 23:20)
Кавычки пропустил.
← →
Владислав © (2014-02-05 00:04) [26]> а в гугл заглянуть? (04.02.14 21:50) [15]
> а в гугл заглянуть? (04.02.14 22:00) [18]program FizzBuzz;
{$APPTYPE CONSOLE}
uses
System.SysUtils;
const
SOutputFormat: array [Boolean] of array [Boolean] of string =
(("%d", "Buzz"),
("Fizz", "FizzBuzz"));
var
I: Integer;
begin
for I := 1 to 100 do
Writeln(Format(SOutputFormat[I mod 3 = 0][I mod 5 = 0], [I]));
end.
← →
Дмитрий СС (2014-02-05 00:32) [27]
> Более элегантного и оптимального решения не найдете:
Что значит оптимальнее? По скорости [5] будет быстрее (если убрать стеб)
← →
Дмитрий СС (2014-02-05 00:51) [28]Вот еще вариант.
var
I: Integer;
begin
for I := 1 to 100 do
begin
case I mod 15 of
0: Write("FizzBuzz ");
3, 6, 9, 12: Write("Fizz ");
5, 10: Write("Buzz ");
else
Write(I, " ");
end;
end;
Readln;
end.
Сложно решить задачу, когда ждешь подвоха.
А вообще если задача поставлена как поставлена, то любое правильное решение нормальное. Любому компьютеру (и, наверное, почти любому микроконтроллеру) хватит памяти и скорости решить эту задачу мгновенно.
← →
Дмитрий СС (2014-02-05 00:54) [29]Или вот:
var
I: Integer;
begin
for I := 1 to 100 do
begin
Write(I, #13);
if I mod 3 = 0 then Write("Fizz");
if I mod 5 = 0 then Write("Buzz");
Writeln;
end;
Readln;
end.
← →
Inovet © (2014-02-05 01:01) [30]> [29] Дмитрий СС (05.02.14 00:54)
Вместо числа же эти фузипуси надо.
← →
Дмитрий СС (2014-02-05 01:06) [31]
> Inovet © (05.02.14 01:01) [30]
А ты запусти:)
← →
Inovet © (2014-02-05 01:12) [32]> [31] Дмитрий СС (05.02.14 01:06)
> А ты запусти:)
Так это шаманство с возвратом каретки.
фузипуси.exe > prn
или
фузипуси.exe > 1.txt
разоблачит магию.
← →
FizzBazz (2014-02-05 11:19) [33]А на внешний вид вот так как-то православней выгдядит
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i: Integer;
s: string;
begin
for i := 1 to 100 do
begin
s := "";
if i mod 3 = 0 then
s :="Fizz";
if i mod 5 = 0 then
s := s +"Buzz";
if s = "" then
Write (i, " ")
else
Write (s, " ")
end;
ReadLn
end.
← →
Дмитрий СС (2014-02-05 11:24) [34]
> FizzBazz (05.02.14 11:19) [33]
Это и есть твой вариант?
← →
sniknik © (2014-02-05 11:30) [35]самый православный вот ("идея" от лучшего решения на php из статьи) -
{$APPTYPE CONSOLE}
begin
Write(
"1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz"#13#10+
"Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz"#13#10+
"Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58"#13#10+
"59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76"#13#10+
"77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz"#13#10+
"Fizz 97 98 Fizz Buzz"
);
ReadLn;
end.
← →
Inovet © (2014-02-05 11:33) [36]> [33] FizzBazz (05.02.14 11:19)
Ну и где там 2 сравнения?
← →
FizzBazz (2014-02-05 11:36) [37]Дмитрий СС (05.02.14 11:24) [34]
Не, я с флагами делал. Примерно как Слава Пестов1 (04.02.14 19:08) [14]
Но раз уж выложили похожее, нафига повторять?
← →
анонимус (2014-02-05 12:45) [38]а без деления никак?
int i3 = 1;
int i5 = 1;
String res;
for (int i = 1; i<=100; i++) {
res = "";
if (i3 == 3) {
res+="Fizz";
i3 = 0;
}
if (i5 == 5) {
res+="Buzz";
i5 = 0;
}
if (res.equals("")) res= String.valueOf(i);
System.out.println(res);
i3++; i5++;
}
← →
Владислав © (2014-02-05 12:55) [39]Без деления уже было.
← →
а в гугл заглянуть? (2014-02-05 14:03) [40]Владислав, уж оптимизировать, так оптимизировать:
const s: array[0..14] of string = ("FizzBuzz", "%d", "%d", "Fizz", "%d", "Buzz", "Fizz", "%d", "%d", "Fizz", "%d", "%d", "Fizz", "%d", "%d");
begin
for I := 1 to 100 do Writeln(Format(s[I mod 15], [I]));
end.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2014.09.07;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.002 c