- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
//Просто скажите говнокод это или нет. Сильно не пинать, я ток учусь программировать. Нужно адекватное мнение
//По идее я правильно решил?
//Вот условие задачи:
//
{
А) Исследуя модель танцевального кружка, можно заметить, что в любой
момент одна из двух очередей обязательно пуста. В самом деле, если приходит
больше мальчиков, то будет пуста девчоночья очередь и наоборот. Можно ли
обойтись одной очередью? Придумайте, как это сделать.
Подсказка: добавьте функцию для тестирования очереди с тем, чтобы
выяснить, не пуста ли она. И, если не пуста, то кто томится в ней — мальчик или
девочка? Эта функция не должна изменять состояние очереди.}
//Вот моё решение:
uses Crt;
var
S_IN : String; //Stream In
S_OUT : String; //Stream Out
b : boolean; //Lenth = 0 or no?
S : String; //Boys and Girls
c1, c2, c3 : char; //Symbols: first and second
i : Integer; //Index in input stream
//Кто томится в очереди, мальчик или девочка?
function EmptyQue (var Que : String; var boy_or_girl : char) : boolean;
begin
if Length (Que) = 0 then EmptyQue:=false
else
begin
boy_or_girl:=Que[1];
EmptyQue:=true;
end;
end;
//Постановка символа arg в очередь Que
procedure PutInQue (var Que : String; arg : char);
begin
Que:=Que+arg;
end;
//Являются ли первый символ в очереди и текущий одинакового регистра
function Test (const Que : String): boolean;
begin
if ((c3 in ['A'..'Z']) and (c1 in ['A'..'Z'])) // 'A'..'Z'
or
((c3 in ['a'..'z']) and (c1 in ['a'..'z'])) //'a'..'z'
then
Test:=true
else
Test:=false;
end;
//Извлечь из очереди
function GetFromQue (var Que : String; var arg : char) : boolean;
var
b : boolean;
begin
b:=Test (Que); //Если первый в очереди и текущий, мальчик или
if b then GetFromQue:=false //девочка, то идем дальше, пару не составляем
else
begin
GetFromQue:=true;
arg:=Que[1];
Delete (Que,1,1);
end;
end;
begin
ClrScr;
S_IN:='ZHJKqwertASDyuiopQWERTYUIOPasdf';
S_OUT:='';
c3:=#0;
S:='';
for i:=1 to Length (S_IN) do
begin
c1:=S_IN[i];
b:=EmptyQue (S,c3);
if b then begin
if c1 in ['A'..'Z'] then begin
if GetFromQue (S,c2) then S_OUT:=S_OUT+c1+c2+' '
else
PutInQue (S,c1);
end
else
begin
if GetFromQue (S,c2) then S_OUT:=S_OUT+c2+c1+' '
else
PutInQue (S,c1);
end;
end
else
PutInQue (S,c1);
end;
Writeln ('Входной поток: ');
Writeln (S_IN);
Writeln ('Выходной поток: ');
Writeln (S_OUT);
Writeln ('В очереди остались:');
Writeln (S);
Readln;
end.
Хочу узнать мнение других людей. Наговнокодил ли я или нет, пока решал задачу (задача из книги по программированию "Песни о Паскале"). Короче дана входная строка, состоящая из маленьких и больших латинских букв (большие - мальчики, маленькие - девочки). Есть две очереди Boys и Girls. Если текущий символ (это в цикле) мальчик, то достаем девочку, иначе - достаем мальчика.
:
...
for i:=1 to Length(S_IN) do begin
c1:= S_IN[i]; { выбираем из входного потока }
if c1 in ['A'..'Z']
then begin { если это мальчик...}
{ если в очереди есть девочка }
if GetFromQue(Girls, c2)
{ добавляем пару в выходной поток }
then S_OUT:= S_OUT+c1+c2+’ ’
{ а иначе помещаем мальчика в очередь }
else PutInQue(Boys, c1);
end
else begin { а если это девочка...}
{ если в очереди есть мальчик }
if GetFromQue(Boys, c2)
{ добавляем пару в выходной поток }
then S_OUT:= S_OUT+c2+c1+’ ’
{ а иначе помещаем девочку в очередь }
else PutInQue(Girls, c1);
end
end;
...
Теперь необходимо всё делать в одной очереди (а не Boys и Girls)
cykablyad 11.06.2016 11:43 # +12
Soul_re@ver 12.06.2016 22:40 # +10
Small_Diamond 21.06.2016 06:50 # +10
guest 11.06.2016 15:50 # +15
Small_Diamond 11.06.2016 16:06 # +10
3.14159265 21.06.2016 03:10 # +10
inkanus-gray 11.06.2016 17:10 # +10
Уже плохо: какие-то глобальные переменные, да ещё и с ни о чём не говорящими названиями.
Если от этого кода оторваться и вернуться через несколько недель, то Вы уже сами не вспомните, какой фрагмент что делает.
Вообще рекомендую погуглить материал по теме «сцепление модулей».
Small_Diamond 20.06.2016 15:34 # +10
gost 11.06.2016 18:52 # +18
Следи за руками, Small_Diamond! Свой код ты выложил на сайт govnokod.ru, откуда можно сделать вывод, что твой код - это говнокод. Всё просто!
Small_Diamond 20.06.2016 15:34 # +10
LispGovno 12.06.2016 02:59 # +10
guestinho 13.06.2016 22:40 # +10
Small_Diamond 20.06.2016 15:39 # +9
inkanus-gray 20.06.2016 15:57 # +10
labutinpa 23.06.2016 16:19 # +11
chtulhu 14.06.2016 09:32 # +13
>Если приходит больше мальчиков
>танцевального
>больше мальчиков
impossible
kegdan 14.06.2016 09:37 # +11
1. Мальчики не выбирают сами, а родители не спрашивают (по себе знаю) что хочет чадо, и, если учитывать, сколько идиотов стало вокруг, вполне логично, что всякие вейперы и хипстеры отправляют пацанов в плясуны.
2. Парни в сознательном возрасте могут идти на балет ради девчонок. Логично, если ты один на 20 баб, то ты в шоколаде, даже если крив и страшен. А потом некоторые втягиваются, и все.
guest 14.06.2016 12:53 # +13
guesto 14.06.2016 23:03 # +9
Фу хуйня. Даже не матюкнешься.
В балете гейропейские ценности прижились задолго до того, как у вас стало принято материть европку, но при этом все хорошее привозить оттуда.
inkanus-gray 14.06.2016 23:53 # +9
kegdan 15.06.2016 05:08 # +13
3_14dar 15.06.2016 06:45 # +4
kegdan 15.06.2016 07:00 # +13
3_14dar 15.06.2016 18:10 # +4
3_14dar 16.06.2016 01:29 # +6
bormand 15.06.2016 07:01 # +9
Кто все эти люди?
1024-- 15.06.2016 08:21 # +9
kegdan 15.06.2016 10:45 # +10
Примерно так переводится кудахтанье среднестатистического питуха на русский язык
bormand 15.06.2016 10:48 # +9
kegdan 15.06.2016 10:50 # +9
bormand 15.06.2016 10:54 # +9
kegdan 15.06.2016 10:55 # +9
bormand 15.06.2016 10:59 # +9
kegdan 15.06.2016 11:19 # +9
MyguJIA 25.09.2018 15:40 # 0
kegdan 15.06.2016 08:57 # +9
defecate-plusplus 15.06.2016 11:18 # +9
kegdan 15.06.2016 11:19 # +9
bormand 15.06.2016 11:19 # +9
Ну это уже 18+ какое-то...
Small_Diamond 20.06.2016 15:37 # +9
TarasB 15.06.2016 10:35 # +9
3.14159265 16.06.2016 00:25 # +12
>колготки
>пидары
>сосёт
3_14dar 16.06.2016 10:09 # +9
bormand 16.06.2016 11:23 # +10
inkanus-gray 16.06.2016 13:00 # +11
3_14dar 16.06.2016 22:14 # +12
Small_Diamond 20.06.2016 15:37 # +9
karonetua 28.10.2016 06:22 # 0
procedure TForm1.Button1Click(Sender: TObject);
var s,a:string; {a - входной поток s - очередь}
v,z,i:integer; {v - счетчик очереди: 0 - нет очереди, положительное - очередь больших, отрицательное -очередь маленьких z - текущий сивол: -1 маленькая 1 большая i - Index }
begin
a:=Edit1.Text;
s:=a[1];
if (ord(a[1]) div 97) = 1 then v:=1 else v:=-1;
for i:=2 to length(a) do
begin
if (ord(a[i]) div 97) = 1 then z:=1 else z:=-1;
memo1.Lines.Add('Очередь : '+s+' '+inttostr(v));
if v=0 then
begin
Memo1.Lines.Add('Очереди нет ');
v:=v+z;
s:=a[i];
end
else
if v*z>0 then
begin
s:=s+a[i];
v:=v+z;
end
else
begin
Memo1.Lines.Add('Пара образована : '+s[1]+'-'+a[i]);
delete(s,1,1);
if z=1 then v:=v+1 else v:=v-1;
end;
end;
Memo1.Lines.Add('В очереди остались :'+s);
end;