Страница 1 из 1
Для любителей Си
Добавлено: 2009-авг-29 01:11
TopIce
Код: Выделить всё
#include "stdio.h"
void main()
{
// Эта программа должна вывести /
// первые 8 чисел Фибоначчи: /
// 1, 1, 2, 3, 5, 8, 13, 21. /
// Определим первое и второе /
// значение ряда - это единицы: /
int first = 1, second = 1;
// Сразу же выведем первое число: /
printf("%d, ", first);
// Цикл "делать следующее, пока /
// второе значение меньше 20". /
while (second < 20) { // проверили/
// Следующее - это сумма /
// первого и второго. Вычислим /
int next = first + second;
// Теперь надо записать второе /
// значение в первое, а следую- /
// щее - во второе, так ведь ???/
first = second;
second = next;
// Выведем на экран первое число/
printf("%d, ", first);
}
// Выведем последнее значение ряда/
printf("%d\n", second);
}
Теперь вопрос знатокам: почему эта программа выводит не ожидаемый ряд «1, 1, 2, 3, 5, 8, 13, 21», а неожиданный «1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20»? Почему это проявляется не у всех?
Re: Для любителей Си
Добавлено: 2009-авг-29 01:12
scorpiones
ээээ....форумом не ошибся ?
Re: Для любителей Си
Добавлено: 2009-авг-29 01:16
Dobry
Scorpiones писал(а):ээээ....форумом не ошибся ?
Я уже заметил.
Сегодня он не в себе.
Либо налил что нибудь ни то.
Либо забил.
Вот и прёт .
Мишь, ты тока не волнуйся - завтра отпустит

Re: Для любителей Си
Добавлено: 2009-авг-29 01:18
TopIce
Я и не волнуюсь, завтра вас ждет гиометрия, ибо сегодня у самого уже не хватает на нее мозгов
Re: Для любителей Си
Добавлено: 2009-авг-29 01:21
Dobry
Re: Для любителей Си
Добавлено: 2009-авг-29 01:22
Dobry
Мишь.
у меня шато и сёмушка слабосалёная. а тебя то с чего?
Re: Для любителей Си
Добавлено: 2009-авг-29 01:24
scorpiones
хммм....уж не ту тему, о которой не стоит вслух говорить, ты имеешь ввиду ???
видимо завтра он будет загибать (гиометрически)
Re: Для любителей Си
Добавлено: 2009-авг-29 01:38
TopIce
Scorpiones писал(а):ээээ....форумом не ошибся ?
велосипедист-математик
Re: Для любителей Си
Добавлено: 2009-авг-29 09:42
KIZ
Этот кусок кода работает. А для того, чтобы прога выдавала единицы надо выкинуть строчку
first = second;
Мб косяк синтаксиса был.
P.S. Не плодите сущностей, вынеси объявление next из цикла.
Re: Для любителей Си
Добавлено: 2009-авг-29 10:08
Vovka
Top Ice писал(а):
// Эта программа должна вывести /
// первые 8 чисел Фибоначчи: /
// 1, 1, 2, 3, 5, 8, 13, 21. /
Какой-то новый стандарт Си?

Можно так комментарии объявлять?
Думал что только такой вариант для чисто сишных прог верен - /* 123.. */
Re: Для любителей Си
Добавлено: 2009-авг-29 13:46
TopIce
Vovka писал(а):Top Ice писал(а):
// Эта программа должна вывести /
// первые 8 чисел Фибоначчи: /
// 1, 1, 2, 3, 5, 8, 13, 21. /
Какой-то новый стандарт Си?

Можно так комментарии объявлять?
Думал что только такой вариант для чисто сишных прог верен - /* 123.. */
в варианте /* 123.. */ будет закрытый комментарий, справа и слева от которого будет код
в варианте //* 123.. * будет открытый комментарий слева от которого будет код, а все что справо будет комментарием, до конца строки разумеется.
Re: Для любителей Си
Добавлено: 2009-авг-29 13:52
TopIce
KIZ писал(а):Этот кусок кода работает. А для того, чтобы прога выдавала единицы надо выкинуть строчку
first = second;
Мб косяк синтаксиса был.
P.S. Не плодите сущностей, вынеси объявление next из цикла.
Зачем его выносить из цикла если и так все прекрасно работает, но не на всех компиляторах, связано это с вашей правельной догадкой, косяк синтаксиса, в каком месте я думаю вы уже догодались.
и по скольку это всетаки велофорум дам подсказку в виде экскурса в историю. На старых клавиатурах отсутствовали некоторые символы, для чего в стандартах были придуманы им замены в виде сочитания других символов.
Re: Для любителей Си
Добавлено: 2009-авг-29 14:00
KIZ
Работает - не аргумент. Это семантическая ошибка, работает медленнее чем могло бы.
Re: Для любителей Си
Добавлено: 2009-авг-29 14:12
TopIce
Данный код вообще не работает в некоторых случаях, в каких?
Re: Для любителей Си
Добавлено: 2009-авг-29 17:49
Vovka
Да, сейчас уточнил для себя... С99 позволяет одиночные комментарии //
И начала тоже как-то странное и забытое, хотя допустимое конечно...
void main()
Обычно так объявляют в С
с возвратом - return...
Хотя к рассматриваемой проблеме мной описанное не относится

Re: Для любителей Си
Добавлено: 2009-авг-31 11:37
vdd
/ щее - во второе, так ведь ???/
first = second;
?/ - экранирование CR/LF, вследствие чего "first = second;" уходило в комментарий?
По идее подобное экранирование должно работать только в строковых константах.
Re: Для любителей Си
Добавлено: 2009-авг-31 16:15
TopIce
практически так. ??/ воспринималось компилятором как \ что означает перенос коментария на следующею строку, в результате "first = second;" уходило в комментарий
Re: Для любителей Си
Добавлено: 2009-авг-31 16:42
Danil
А мы писали маленькие резидентники которые меняли ">" на "<" и наоборот в буфере экрана, и запускали на компьютере товарищей и потом смотрели как они их исправляют лихорадочно и тупят :)