IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
Closed Topic Открыть новую тему 
> Вычисление n первых чисел Фибоначчи, Си
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Здравствуйте! Подскажите пожалуйста, как решить на языке Си следующую задачку:

-написать программу вычисления n первых чисел Фибоначчи, использовать цикл for. n задается пользователем.
-написать программу вычисления n первых чисел Фибоначчи, использовать цикл while. n задается пользователем.

Проблема в том,что недавно приступил к изучению сего языка и ещё опыта программирование на Си не имею.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
опыта программирование на Си не имею
Опыт программирования вообще имеешь? Знаешь, что такое цикл for? Вся твоя задача сводится к следующему:

Код
предыдущее_число = 1;
текущее число = 1;

для i от 3 до n цикл

  следующее_число = предыдущее_число + текущее число;
  напечатать следующее_число;
  предыдущее_число = текущее_число;
  текущее_число = следующее_число;

конец_цикла
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 25.09.2007 19:04) *

Опыт программирования вообще имеешь? Знаешь, что такое цикл for? Вся твоя задача сводится к следующему:

Код
предыдущее_число = 1;
текущее число = 1;

для i от 3 до n цикл

  следующее_число = предыдущее_число + текущее число;
  напечатать следующее_число;
  предыдущее_число = текущее_число;
  текущее_число = следующее_число;

конец_цикла



Да, опыт программирования я имею на паскале. И с циклами я тож знаком. А хотел я лишь узнать как именно на Си эту задачу оформить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






#include <stdio.h>

int main(void) {
int first = 1, second = 1, i, n, next;
printf("enter n:");
scanf("%d", &n);
printf("%4d%4d", first, second);
for(i = 2; i < n; i++) {
printf("%4d", (next = (first + second)));
first = second; second = next;
}
return 0;
}

через While сам разберешься?

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 25.09.2007 19:39) *

#include <stdio.h>

int main(void) {
int first = 1, second = 1, i, n, next;
printf("enter n:");
scanf("%d", &n);
printf("%4d%4d", first, second);
for(i = 2; i < n; i++) {
printf("%4d", (next = (first + second)));
first = second; second = next;
}
return 0;
}

через While сам разберешься?

Большое спасибо за помощь! Ток у меня ещё один небольшой вопрос: как реализовать операцию корень из числа?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






sqrt()
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 30.09.2007 18:17) *

sqrt()

Вот программа:

#include <stdio.h>

void main()
{
int a,b,c,d ;
float x1,x2;
printf("Enter a,b,c: ");
scanf("%d %d %d", &a,&b,&c);
d=b*b-4*a*c;
x1=(-b+sqrt(d))/2*a;
x2=(-b-sqrt(d))/2*a;
printf("%d %d", x1, x2);
}

для вычисления корней уравнения a*x*x+b*x+c=0. Считая, что при введенных коэффициентах корни обязательно заведомо есть, и они действительные. (не надо проверять a?0 и D>0). компилятор выдает сообщение об ошибке именно в sqrt(). Как исправить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






#include <math.h>

забыл? Описана-то функция именно в этом файле...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 30.09.2007 19:37) *

#include <math.h>

забыл? Описана-то функция именно в этом файле...

теперь при выполнение операции sqrt() компилятор выдает надпись "Domain error", х1 и х2 получаются равными 0. В чем теперь косяк?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Знаешь что, я не телепат... Нужна помощь - приводи данные, которые вводил... Не нужна - разбирайся сам...

Кстати,
Цитата
(не надо проверять a?0 и D>0)
Очень опасное заблуждение - оно тебе и мешает сейчас...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 30.09.2007 19:51) *


Кстати, Очень опасное заблуждение - оно тебе и мешает сейчас...

да так в условие задачи...сам-то хочу привести к более правильному с математической точки зрения виду.
Про DoMain error понял: отрицательный дискриминант был. но вот теперь ввожу я а=1, б=2, с=1. В ответе получаю опять 0. Почему? и как описать проверку условий на а и дискреминант?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
В ответе получаю опять 0. Почему?
Потому что для вещественных есть спецификатор %f, а не %d...

Вот так делается проверка условий:

#include <stdio.h>
#include <math.h>

int main()
{
int a,b,c,d ;
float x1,x2;

printf("Enter a,b,c: ");
scanf("%d %d %d", &a,&b,&c);
d=b*b-4*a*c;
if(a) {
if(d >= 0) {
x1=(-b+sqrt(d))/2*a;
x2=(-b-sqrt(d))/2*a;
printf("%f %f", x1, x2);
}
else printf("d < 0");
}
else printf("a = 0 (divizion by zero)")

return 0;
}
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


ещё раз большое спасибо))
И,пожалуй, последний на сегодня вопрос: как реализовать в программе счетчик дейсвия стрелок вверх/вниз/влево/вправо? То есть при нажатие вверх/вниз увеличивалась/уменьшалась переменная у, а при нажатие влево/вправо увеличивалась/уменьшалась переменная х.

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Это зависит от того, куда тебе надо это вклинить (кстати, каким компилятором ты пользуешься?)

Ты хочешь сделать управление движением курсора по экрану?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 30.09.2007 23:16) *

Это зависит от того, куда тебе надо это вклинить (кстати, каким компилятором ты пользуешься?)

Ты хочешь сделать управление движением курсора по экрану?

Я пользуюсь скорее всего стандартным компилятором turbo C.
Я задача в общем формулируется так:
"Написать программу управления состоянием двух координат X и Y. Управление производится клавишами курсора. Необходимо менять значения этих переменных в соответствии с нажатой клавишей - влево/вправо - уменьшать/увеличивать значение X, вверх/вниз - уменьшать/увеличивать значение Y. Состояние X и Y выводить на экран при каждом нажатии клавиши в виде - X,Y. Если X и Y равны 0, то добавочно выводить сообщение 'Центр'. Выход из программы – по нажатию клавиши ESC."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Вот так:
#include <stdio.h>
#include <conio.h>

int main() {

const int max_x = 80;
const int max_y = 25;
int ch;

do {
if((ch = getch()) == 0)
switch(getch()) {
case 72:
if(wherey() > 1) gotoxy(wherex(), wherey() - 1);
break;
case 80:
if(wherey() < max_y) gotoxy(wherex(), wherey() + 1);
break;
case 75:
if(wherex() > 1) gotoxy(wherex() - 1, wherey());
break;
case 77:
if(wherex() < max_x) gotoxy(wherex() + 1, wherey());
break;
}

} while(ch != 27);

return 0;
}

?

Запускай и управляй координатами курсора...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


А как реализовать более менее приличный вывод сообщения о координатах ХУ и ЦЕНТРЕ?

Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






Ну, печатай в самом начале цикла do... Откуда же я знаю, КАК ИМЕННО тебе надо это вывести, в какой позиции, каким цветом? Это в конце концов ТВОЕ задание, так будь добр хоть что-то сделать сам!

(вот только не надо ничего говорить о том, что ты не знаешь С... Программа на Паскале будет выглядеть почти буква в букву).

Добавлено через 1 мин.
P.S. Кстати, что за привычка делать из темы свалку? Это задание что, как-то связано с Фибоначчи? dry.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Вот код программы:

#include <stdio.h>
#include <conio.h>

int main()
{
int ch,x=0,y=0;

while (ch !=27)
{ ch = getch();
switch(ch)
{ case 72:
y++;
break;
case 80:
y--;
break;
case 75:
x--;
break;
case 77:
x++;
break;
}

clrscr;
printf("%d %d\n",x,y);
if (x==0 && y==0) printf ("Centr\n"); }

}

почему происходит вывод предыдущих координат?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Rocket, одна задача - одна тема.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 1:34
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name