![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Rocket |
![]() ![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Здравствуйте! Подскажите пожалуйста, как решить на языке Си следующую задачку:
-написать программу вычисления n первых чисел Фибоначчи, использовать цикл for. n задается пользователем. -написать программу вычисления n первых чисел Фибоначчи, использовать цикл while. n задается пользователем. Проблема в том,что недавно приступил к изучению сего языка и ещё опыта программирование на Си не имею. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата опыта программирование на Си не имею Опыт программирования вообще имеешь? Знаешь, что такое цикл for? Вся твоя задача сводится к следующему:Код предыдущее_число = 1; текущее число = 1; для i от 3 до n цикл следующее_число = предыдущее_число + текущее число; напечатать следующее_число; предыдущее_число = текущее_число; текущее_число = следующее_число; конец_цикла |
Rocket |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Опыт программирования вообще имеешь? Знаешь, что такое цикл for? Вся твоя задача сводится к следующему: Код предыдущее_число = 1; текущее число = 1; для i от 3 до n цикл следующее_число = предыдущее_число + текущее число; напечатать следующее_число; предыдущее_число = текущее_число; текущее_число = следующее_число; конец_цикла Да, опыт программирования я имею на паскале. И с циклами я тож знаком. А хотел я лишь узнать как именно на Си эту задачу оформить. |
volvo |
![]()
Сообщение
#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 - 25.09.2007 18:40 |
Rocket |
![]()
Сообщение
#5
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
#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 |
![]()
Сообщение
#6
|
Гость ![]() |
sqrt()
|
Rocket |
![]()
Сообщение
#7
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
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(). Как исправить? |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
#include <math.h>
забыл? Описана-то функция именно в этом файле... |
Rocket |
![]()
Сообщение
#9
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Знаешь что, я не телепат... Нужна помощь - приводи данные, которые вводил... Не нужна - разбирайся сам...
Кстати, Цитата (не надо проверять a?0 и D>0) Очень опасное заблуждение - оно тебе и мешает сейчас... |
Rocket |
![]()
Сообщение
#11
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Кстати, Очень опасное заблуждение - оно тебе и мешает сейчас... да так в условие задачи...сам-то хочу привести к более правильному с математической точки зрения виду. Про DoMain error понял: отрицательный дискриминант был. но вот теперь ввожу я а=1, б=2, с=1. В ответе получаю опять 0. Почему? и как описать проверку условий на а и дискреминант? |
volvo |
![]()
Сообщение
#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;
}
|
Rocket |
![]()
Сообщение
#13
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
ещё раз большое спасибо))
И,пожалуй, последний на сегодня вопрос: как реализовать в программе счетчик дейсвия стрелок вверх/вниз/влево/вправо? То есть при нажатие вверх/вниз увеличивалась/уменьшалась переменная у, а при нажатие влево/вправо увеличивалась/уменьшалась переменная х. Сообщение отредактировано: volvo - 14.01.2009 10:07 |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Это зависит от того, куда тебе надо это вклинить (кстати, каким компилятором ты пользуешься?)
Ты хочешь сделать управление движением курсора по экрану? |
Rocket |
![]()
Сообщение
#15
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Это зависит от того, куда тебе надо это вклинить (кстати, каким компилятором ты пользуешься?) Ты хочешь сделать управление движением курсора по экрану? Я пользуюсь скорее всего стандартным компилятором turbo C. Я задача в общем формулируется так: "Написать программу управления состоянием двух координат X и Y. Управление производится клавишами курсора. Необходимо менять значения этих переменных в соответствии с нажатой клавишей - влево/вправо - уменьшать/увеличивать значение X, вверх/вниз - уменьшать/увеличивать значение Y. Состояние X и Y выводить на экран при каждом нажатии клавиши в виде - X,Y. Если X и Y равны 0, то добавочно выводить сообщение 'Центр'. Выход из программы – по нажатию клавиши ESC." |
volvo |
![]()
Сообщение
#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;
}
? Запускай и управляй координатами курсора... |
Rocket |
![]()
Сообщение
#17
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
А как реализовать более менее приличный вывод сообщения о координатах ХУ и ЦЕНТРЕ?
Сообщение отредактировано: volvo - 14.01.2009 10:06 |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Ну, печатай в самом начале цикла do... Откуда же я знаю, КАК ИМЕННО тебе надо это вывести, в какой позиции, каким цветом? Это в конце концов ТВОЕ задание, так будь добр хоть что-то сделать сам!
(вот только не надо ничего говорить о том, что ты не знаешь С... Программа на Паскале будет выглядеть почти буква в букву). Добавлено через 1 мин. P.S. Кстати, что за привычка делать из темы свалку? Это задание что, как-то связано с Фибоначчи? ![]() |
Rocket |
![]()
Сообщение
#19
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Вот код программы:
#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"); }
}
почему происходит вывод предыдущих координат? |
klem4 |
![]()
Сообщение
#20
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Rocket, одна задача - одна тема.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 20:58 |