Страница 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 писал(а):ээээ....форумом не ошибся ?
Я уже заметил.
Сегодня он не в себе.
Либо налил что нибудь ни то.
Либо забил. :SARCASTIC:
Вот и прёт .
Мишь, ты тока не волнуйся - завтра отпустит :ROFL: :ROFL: :ROFL: :ROFL:

Re: Для любителей Си

Добавлено: 2009-авг-29 01:18
TopIce
Я и не волнуюсь, завтра вас ждет гиометрия, ибо сегодня у самого уже не хватает на нее мозгов

Re: Для любителей Си

Добавлено: 2009-авг-29 01:21
Dobry
Top Ice писал(а):Я и не волнуюсь, завтра вас ждет гиометрия, ибо сегодня у самого уже не хватает на нее мозгов
:ROFL: :ROFL: :ROFL: :ROFL: :ROFL: :ROFL: :ROFL: :ROFL: :ROFL: :ROFL:

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()
Обычно так объявляют в С

Код: Выделить всё

int main(void)
с возвратом - return...
Хотя к рассматриваемой проблеме мной описанное не относится :PARDON:

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
А мы писали маленькие резидентники которые меняли ">" на "<" и наоборот в буфере экрана, и запускали на компьютере товарищей и потом смотрели как они их исправляют лихорадочно и тупят :)