Форум «Всё о Паскале» _ Ада и другие языки _ Вычисление n первых чисел Фибоначчи
Автор: Rocket 25.09.2007 21:27
Здравствуйте! Подскажите пожалуйста, как решить на языке Си следующую задачку:
-написать программу вычисления n первых чисел Фибоначчи, использовать цикл for. n задается пользователем. -написать программу вычисления n первых чисел Фибоначчи, использовать цикл while. n задается пользователем.
Проблема в том,что недавно приступил к изучению сего языка и ещё опыта программирование на Си не имею.
Автор: volvo 25.09.2007 22:04
Цитата
опыта программирование на Си не имею
Опыт программирования вообще имеешь? Знаешь, что такое цикл for? Вся твоя задача сводится к следующему:
Да, опыт программирования я имею на паскале. И с циклами я тож знаком. А хотел я лишь узнать как именно на Си эту задачу оформить.
Автор: volvo 25.09.2007 22: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 сам разберешься?
Автор: Rocket 30.09.2007 21:11
Цитата(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 сам разберешься?
Большое спасибо за помощь! Ток у меня ещё один небольшой вопрос: как реализовать операцию корень из числа?
для вычисления корней уравнения a*x*x+b*x+c=0. Считая, что при введенных коэффициентах корни обязательно заведомо есть, и они действительные. (не надо проверять a?0 и D>0). компилятор выдает сообщение об ошибке именно в sqrt(). Как исправить?
Автор: volvo 30.09.2007 22:37
#include <math.h>
забыл? Описана-то функция именно в этом файле...
Автор: Rocket 30.09.2007 22:49
Цитата(volvo @ 30.09.2007 19:37)
#include <math.h>
забыл? Описана-то функция именно в этом файле...
теперь при выполнение операции sqrt() компилятор выдает надпись "Domain error", х1 и х2 получаются равными 0. В чем теперь косяк?
Автор: volvo 30.09.2007 22:51
Знаешь что, я не телепат... Нужна помощь - приводи данные, которые вводил... Не нужна - разбирайся сам...
Кстати,
Цитата
(не надо проверять a?0 и D>0)
Очень опасное заблуждение - оно тебе и мешает сейчас...
Автор: Rocket 30.09.2007 23:04
Цитата(volvo @ 30.09.2007 19:51)
Кстати, Очень опасное заблуждение - оно тебе и мешает сейчас...
да так в условие задачи...сам-то хочу привести к более правильному с математической точки зрения виду. Про DoMain error понял: отрицательный дискриминант был. но вот теперь ввожу я а=1, б=2, с=1. В ответе получаю опять 0. Почему? и как описать проверку условий на а и дискреминант?
Автор: volvo 1.10.2007 0:20
Цитата
В ответе получаю опять 0. Почему?
Потому что для вещественных есть спецификатор %f, а не %d...
ещё раз большое спасибо)) И,пожалуй, последний на сегодня вопрос: как реализовать в программе счетчик дейсвия стрелок вверх/вниз/влево/вправо? То есть при нажатие вверх/вниз увеличивалась/уменьшалась переменная у, а при нажатие влево/вправо увеличивалась/уменьшалась переменная х.
Автор: volvo 1.10.2007 2:16
Это зависит от того, куда тебе надо это вклинить (кстати, каким компилятором ты пользуешься?)
Ты хочешь сделать управление движением курсора по экрану?
Автор: Rocket 1.10.2007 2:23
Цитата(volvo @ 30.09.2007 23:16)
Это зависит от того, куда тебе надо это вклинить (кстати, каким компилятором ты пользуешься?)
Ты хочешь сделать управление движением курсора по экрану?
Я пользуюсь скорее всего стандартным компилятором turbo C. Я задача в общем формулируется так: "Написать программу управления состоянием двух координат X и Y. Управление производится клавишами курсора. Необходимо менять значения этих переменных в соответствии с нажатой клавишей - влево/вправо - уменьшать/увеличивать значение X, вверх/вниз - уменьшать/увеличивать значение Y. Состояние X и Y выводить на экран при каждом нажатии клавиши в виде - X,Y. Если X и Y равны 0, то добавочно выводить сообщение 'Центр'. Выход из программы – по нажатию клавиши ESC."
Автор: volvo 1.10.2007 2:54
Вот так:
#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; }
?
Запускай и управляй координатами курсора...
Автор: Rocket 1.10.2007 23:21
А как реализовать более менее приличный вывод сообщения о координатах ХУ и ЦЕНТРЕ?
Автор: volvo 1.10.2007 23:39
Ну, печатай в самом начале цикла do... Откуда же я знаю, КАК ИМЕННО тебе надо это вывести, в какой позиции, каким цветом? Это в конце концов ТВОЕ задание, так будь добр хоть что-то сделать сам!
(вот только не надо ничего говорить о том, что ты не знаешь С... Программа на Паскале будет выглядеть почти буква в букву).
Добавлено через 1 мин. P.S. Кстати, что за привычка делать из темы свалку? Это задание что, как-то связано с Фибоначчи?
Автор: Rocket 15.10.2007 0:37
Вот код программы:
#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"); }