Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2011, 13:05   #1
|Dima|
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 21
По умолчанию Не могу разобраться с программой

Программа на чистом Си должна быть. Вот условие:"Дана окружность с координатами Xо,Yo и радиусом r. Дана прямая с координатами x1,y1-x2,y2. Определить координаты точек пересечения прямой с окружостью".

вот код:
Код:
#include <stdio.h>
#include <math.h>
 
float line(float k, float x, float b);
 
int main()
{
        float x1,x2,y1,y2,x0,y0,r,X1,X2,Y1,Y2;
        printf("\tEnter parameters of line\r\n");
        printf("x1 = ");scanf("%g",&x1);
        printf("y1 = ");scanf("%g",&y1);
        printf("x2 = ");scanf("%g",&x2);
        printf("y2 = ");scanf("%g",&y2);
        printf("\tEnter parameters of cicule\r\n");
        printf("x0 = ");scanf("%g",&x0);
        printf("y0 = ");scanf("%g",&y0);
        printf("r  = ");scanf("%g",&r);
 
        float k = (y2 - y1)/(x2 - x1);
        float b = (y2*x1 - y1*x2)/(x1 - x2);
 
        b += (k*x0 - y0); 
 
        float D = pow(2*b*k,2) + 4*(1 + pow(k,2))*(pow(r,2) - pow(b,2));
        if(0 <= D)
        {
                X1 = (-2*b*k - sqrt(D))/(-2*(1 + pow(k,2)));
                Y1 = line(k,X1,b);
                printf("coord point of intersection P1(%lf;%lf)\r\n",X1 + x0,Y1 + y0);
                if(D == 0)
                        printf("\tline is tangent line to circule\r\n");
                else
                {
                        X2 = (-2*b*k + sqrt(D))/(-2*(1 + pow(k,2)));
                        Y2 = line(k,X2,b);
                        printf("coord point of intersection P2(%.2f;%.2f)\r\n",X2 + x0,Y2 + y0);
                        printf("\tline cross circle in two points\r\n");
                }
        }
        else
                printf("line not cross circule\r\n");
        return 0;
}
 
float line(float k, float x, float b)
{
        return (k*x + b);
}
а вот ошибки какие выдаёт:
Код:
prog.c:49:59: warning: no newline at end of file
/tmp/ccZ1rgu8.o: In function `main':
prog.c:(.text+0x1bf): undefined reference to `sqrt'
prog.c:(.text+0x25d): undefined reference to `sqrt'
collect2: ld returned 1 exit status
|Dima| вне форума Ответить с цитированием
Старый 26.07.2011, 13:13   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

мат либу подключаешь? -lm
и да, это не чистый, это грязный С. хоть стандарт С99 и разрешает мешать код с объявлениями, никто так не делает
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 26.07.2011 в 13:17.
pproger вне форума Ответить с цитированием
Старый 26.07.2011, 13:22   #3
|Dima|
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
мат либу подключаешь? -lm
что такое мат либа? =\ math.h поключаю, если вы про это

Цитата:
Сообщение от pproger Посмотреть сообщение
и да, это не чистый, это грязный С. хоть стандарт С99 и разрешает мешать код с объявлениями, никто так не делает
а что в коде не так?

Последний раз редактировалось Stilet; 26.07.2011 в 14:18.
|Dima| вне форума Ответить с цитированием
Старый 26.07.2011, 13:36   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

какой компилятор? как компилируешь?
Цитата:
а что в коде не так?
Цитата:
хоть стандарт С99 и разрешает мешать код с объявлениями, никто так не делает
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 26.07.2011, 13:50   #5
|Dima|
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 21
По умолчанию

Сейчас компилировал на борланде. Программа запустилась, ввёл координаты и дальше она зависает
|Dima| вне форума Ответить с цитированием
Старый 26.07.2011, 14:24   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На VS проверил. Добавил только
Код:
   getchar();getchar();
        return 0;
Чтоб окно задержало, но прога работает
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.07.2011, 14:36   #7
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
хоть стандарт С99 и разрешает мешать код с объявлениями, никто так не делает
если так никто не делает, почему это стало частью стандарта?

про код:
если уж работа с флоатами я бы десятичные разделители константам поставил, а то еще посчитает целыми, и только перед сохранением результата сделает преобразование типа.

Последний раз редактировалось f.hump; 26.07.2011 в 14:44.
f.hump вне форума Ответить с цитированием
Старый 26.07.2011, 14:53   #8
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Stilet
Цитата:
getchar();getchar();
ну господи, ты же не новичок, ну зачем ты советуешь этот бред писать?

2f.hump
Цитата:
если так никто не делает, почему это стало частью стандарта?
возможно, чтоб си компилятором компилировалось какое то подмножество с++ кода. я не говорю, что так делать нельзя, просто так никто не делает посмотри на исходники опен сорс проектов, которые используют возможности с99 (restrict указатели, почленная инициализация структур/массивов и тп). эту же возможность я не видел, чтоб использовали.
кстати, стандартом стали и массивы переменной длины, но это фичу тоже не уважают
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 26.07.2011, 16:07   #9
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

извиняюсь за оффтоп, но, по-моему, недавние жаркие дискуссии о стандартах таки отразились на отношение к ним некоторых людей
sashonk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно разобраться с программой tanjusha Паскаль, Turbo Pascal, PascalABC.NET 8 20.05.2010 04:29
Помогите разобраться с программой Bercut48rus Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 11.12.2009 02:40
Помогите разобраться с программой Svetlyachok Общие вопросы C/C++ 7 06.06.2009 17:55
Помогите разобраться с программой First90_19 Паскаль, Turbo Pascal, PascalABC.NET 0 23.12.2008 01:58