Имя: Пароль:
IT
 
цикл for и Си. задачка
,
0 Wobland
 
06.04.12
09:11
Дан текст программы на языке С. Требуется найти три способа изменить в нем один символ так, чтобы программа стала печатать 20 звездочек. Изменить — это значит не добавить, не убрать и не переставить, а именно поменять.

main() { int i, N=20; for (i = 0 ; i < N ; i--) { printf("*"); } }

два способа нашёл, третий не выходит. поговаривают, есть и четвёртый...
1 Любопытная
 
06.04.12
09:11
Ты сказал, что три нашел! Ах ты жулик!!!)
2 Ranger_83
 
06.04.12
09:12
Счас забанят за инокомыслие
3 Wobland
 
06.04.12
09:13
(1) это была цитата, я так и не нашёл
4 Wobland
 
06.04.12
09:13
(2) официальный язык форума - язык 1С? ;)
5 Любопытная
 
06.04.12
09:14
(3) (i = 0 ; i <-N ; i--) так можно?
6 Wobland
 
06.04.12
09:14
(5) гениально!
7 Любопытная
 
06.04.12
09:16
(6) Ага! Значит я быстрей тебя ее решила!
8 Wobland
 
06.04.12
09:16
+(6) вот что сертификат Профессионала с людьми делает ;)
9 skunk
 
06.04.12
09:16
i-- - это инкремент ... значит i будет принимать следующие значения ... 0, -1, -2 и т.д ... а значит будет всегда меньше 20 ... а значит напечтает не 20 зведочек а пока ты не нажмешь ктрл+с
10 Fish
 
06.04.12
09:17
(5) Так вроде добавлять символ нельзя? А -N - это добавление, а не изменение.
11 Stepa86
 
06.04.12
09:17
N-- написать?
12 Stepa86
 
06.04.12
09:17
(10) пробел заменил на минус
13 spock
 
06.04.12
09:17
(5)"(i = 0 ; i <-N ; i--) так можно?" - из условия задачи нельзя.
14 skunk
 
06.04.12
09:18
наверное правильне было так

main() { int i, N=0; for (i = 20 ; i < N ; i--) { printf("*"); } }
15 ReaLg
 
06.04.12
09:18
Пробелы можно менять? :)
16 Stepa86
 
06.04.12
09:18
и вместо "; i < N ;" написать ";-i < N ;"
17 Stepa86
 
06.04.12
09:19
(14) никто не говорил, что изначально код рабочий
18 skunk
 
06.04.12
09:19
хотя нет
19 Wobland
 
06.04.12
09:19
(9) согласен. заставь делать 20 ;)
20 Fish
 
06.04.12
09:20
(14) Неправильно. Поменял больше одного символа :))
21 ukolabrother
 
06.04.12
09:21
main() { int i, N=20; for (i = 0 ; i < N ; ) { printf("*"); i--} }
22 Wobland
 
06.04.12
09:21
итого уже четыре способа. подведём промежуточные этоги:

main() { int i, N=20; for (i = 0 ; i <-N ; i--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } }
23 Wobland
 
06.04.12
09:21
(21) ну это ваще. много добавил, надо _заменить_
24 skunk
 
06.04.12
09:21
(20)я не менял ... просто в условии код с ошибкой ... напечатает более 20 звездочек
25 Wobland
 
06.04.12
09:23
(24) нет в условии ошибки. просто вот такой вот код
26 ReaLg
 
06.04.12
09:23
i-- заменить на N-- ?
27 Stepa86
 
06.04.12
09:23
(22) а еще 2 какие?
28 ukolabrother
 
06.04.12
09:24
{
for (int i = 0 ; i < int N = 20 ; i--,printf("*"))  
}
все я решил
29 Wobland
 
06.04.12
09:24
(26) три
(27) если не терпится, стукнись в аську, народу, думаю, интересно будет подумать
30 Stepa86
 
06.04.12
09:25
(29) ну третий то в (11) и (26)
31 Wobland
 
06.04.12
09:25
(28) плин, _заменить_ _один_ _символ_
32 Stepa86
 
06.04.12
09:26
четвертый main() { int i, N=20; for (i =20 ; i < N ; i--) { printf("*"); } }
33 zak555
 
06.04.12
09:26
main() { int i, N=21; for (i = 0 ; i < N ; i--) { printf("*"); } }
34 Wobland
 
06.04.12
09:26
уже четыре способа есть

main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ; i <-N ; i--) { printf("*"); } }
35 Wobland
 
06.04.12
09:26
(32)(33) теплее
36 Любопытная
 
06.04.12
09:27
(32)i=40 же
37 Stepa86
 
06.04.12
09:27
в (32) не то воткнул =(  main() { int i, N=20; for (i =40 ; i < N ; i--) { printf("*"); } }
38 Stepa86
 
06.04.12
09:28
+(37) эээээээээм... вот тока не работает это
39 zak555
 
06.04.12
09:29
(35) так у меня 20 и печатает
40 Ненавижу 1С
 
гуру
06.04.12
09:29
main() { int i, N=20; for (i =40 ; i < N ; i--) { printf("*"); } }
41 wertyu
 
06.04.12
09:29
(9) -- - это не инкремент, а декремент
42 Wobland
 
06.04.12
09:29
(39) код из (33)? i уйдёт за за ноль
43 ReaLg
 
06.04.12
09:30
(34) А разве
main() { int i, N=20; for (i = 0 ; i <-N ; i--) { printf("*"); }
не выйдет из цикла на 1м шаге?
44 Wobland
 
06.04.12
09:30
(43) хм...
45 Любопытная
 
06.04.12
09:31
(44) (43) прав. Я не гениальна)
46 Wobland
 
06.04.12
09:32
(45) зато умна, очаровательна и с сертификатом
47 Stepa86
 
06.04.12
09:32
(43) вот вот, поэтому и (36)(37)(40) не работают
48 Любопытная
 
06.04.12
09:34
main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } }
раз i сразу уходит в минус, значит -i пойдет в гору
49 Wobland
 
06.04.12
09:34
выходит, только два нашли?

main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } }
50 Любопытная
 
06.04.12
09:35
Но это только предположение)
51 wertyu
 
06.04.12
09:36
вот же все три уже написали

main() { int i, N=20; for (i = 40 ; i < N ; i--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ; i < -N ; i--) { printf("*"); } }
52 Wobland
 
06.04.12
09:37
(51) i=40 вылетит на первом шаге
53 napagokc
 
06.04.12
09:37
main() { int i, N=20; for (i = 0 ; i < N ; i--) { printf("*"); } }

Хы, я уж начал сомневаться в своих знаниях Си, когда не увидел в первых же комментах, что код не верный. Так-то, забавно:

N = 20;
i = 0;
Пока i < N Цикл
   i = i - 1;
   Сообщить("*");
КонецЦикла;

...и никого ничего не смущает, главное! )))) Бесконечный цикл?
54 Ненавижу 1С
 
гуру
06.04.12
09:37
(51) 1 и 3 вроде кривые
55 Любопытная
 
06.04.12
09:39
(53) там же написано, что его надо изменить. Вы кроме кода ничего больше не читаете?
56 wertyu
 
06.04.12
09:39
(52) значит вот три

main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ; i < -N ; i--) { printf("*"); } }
57 Wobland
 
06.04.12
09:39
(53) не, не смущает. надо заставить делать 20
58 Stepa86
 
06.04.12
09:39
Если написать -i--, то он упадет или внезапно сделает i++ ?
59 Любопытная
 
06.04.12
09:40
(58) это бессмысленно
60 napagokc
 
06.04.12
09:40
(55) Но там и не написано, что код не рабочий. Я внимательно прочитал условие, но сей код меня явно покоребил и я был искренне удивлен, что это не отразили в первых же комментах
61 Wobland
 
06.04.12
09:41
(60) код рабочий. просто неаккуратный
62 Любопытная
 
06.04.12
09:41
(56) -N не подходит. 0>-20 сразу
63 Stepa86
 
06.04.12
09:41
(59) ну если как то заменить i-- на i++, то будет работать
64 napagokc
 
06.04.12
09:42
(61) да, согласен. Холиварить не буду. Но думаю, что вы поняли, что я хотел сказать.
65 wertyu
 
06.04.12
09:43
(62) тогда заменим )
main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ; i < N ; i++) { printf("*"); } }
66 Любопытная
 
06.04.12
09:44
(65) ты заменил два знака
67 Stepa86
 
06.04.12
09:44
(65) в третьем варианте почти не палишся
68 wertyu
 
06.04.12
09:46
(66), (67) ну почему же два? символ декремента заменён на символ инкремента )
69 napagokc
 
06.04.12
09:46
А разве можно ставить "минус" перед i? Это же не замена символа, а добавление нового?
70 napagokc
 
06.04.12
09:47
(69) или подразумевается замена пробела?
71 Любопытная
 
06.04.12
09:47
(69) там пробел есть, так что можно
72 napagokc
 
06.04.12
09:48
(71) Понял. Хотя, ИМХО, читерский способ ))
73 Любопытная
 
06.04.12
09:48
(70) сколько времени ты мне на глаза попадаешься, только сейчас смогла понять, что у тебя за ник))
74 Wobland
 
06.04.12
09:48
(68) оператор декремента, состоящий из двух символов, хотел сказать?
75 Wobland
 
06.04.12
09:48
(72) соответствует ТЗ, значит верный
76 wertyu
 
06.04.12
09:51
(74) заметил подмену понятий )) но это просто небольшой трюк, уловка ))
77 napagokc
 
06.04.12
09:51
что если заменить "printf" на "print"?
78 napagokc
 
06.04.12
09:52
+(77) или fprintf()
79 napagokc
 
06.04.12
09:54
куда все пропали-то? Если можно заменять пробел символом - то дофига подобных способов ведь. Не?
80 napagokc
 
06.04.12
09:55
а, туплю. Цикл ведь останется неверным (((
81 Ненавижу 1С
 
гуру
06.04.12
09:55
main() { int i, N=20; for (i = 0 ; i + N ; i--) { printf("*"); } }
82 Любопытная
 
06.04.12
09:56
Так получается пока только 2 способа нашли?
83 Любопытная
 
06.04.12
09:56
(81) и? бесконечно будет звездочки ляпать
84 Stepa86
 
06.04.12
09:58
(83) как раз рабочий вариант
85 Ненавижу 1С
 
гуру
06.04.12
09:58
(83) почему бесконечно, i станет равным -20, их сумма i+N будет 0, что есть false
86 Любопытная
 
06.04.12
10:00
(84) (85) Да, признаюю. Третий вариант получается
87 Ненавижу 1С
 
гуру
06.04.12
10:01
было так?

main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } }
88 Ненавижу 1С
 
гуру
06.04.12
10:01
+(87) было ((
89 wertyu
 
06.04.12
10:01
да всё

main() { int i, N=20; for (i = 0 ;-i < N ; i--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ; i < N ; N--) { printf("*"); } }
main() { int i, N=20; for (i = 0 ; i + N ; i--) { printf("*"); } }
90 wertyu
 
06.04.12
10:02
+(89) это я просто собрал в кучу )
91 orefkov
 
06.04.12
10:06
(5), (22) - неверно.

main() { int i, N=20; for (i = 0 ; i <-N ; i--) { printf("*"); } }

Ни одного символа не напечатает.
92 Любопытная
 
06.04.12
10:07
(91) это мы уже выяснили
93 orefkov
 
06.04.12
10:10
(92)
Сорри, не заметил
94 Капитан Смоллет
 
06.04.12
10:13
Насмерть порванный баян:

Теоретически возможен четвёртый вариант (хотя его вероятность IMHO) довольно низка...
main()
{
int i, N=20;
for(N = 0 ; i < N ; i--)
printf("*");
}
...
- Каким образом? :)

В i содержится мусор, если повезёт там будет 0x80000013 что даст 20 звёздочек...

http://linuxportal.ru/forums/index.php/mv/msg/20434/0/0/
Программист всегда исправляет последнюю ошибку.