Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 2
1

Вычисление корней квадратного уравнения: как исправить ошибку?

03.05.2018, 19:04. Показов 1318. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вот ошибка:
$ gcc main.c -o main
/tmp/ccl2U91G.o: In function `main':
main.c.text+0xc8): undefined reference to `rootsearch'
collect2: error: ld returned 1 exit status

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//main.c
 
#include <stdio.h>
#include "rootsearch.h"
 
int main() {
 
        //p,q - переменные для корней; a,b,c - коэффициенты
        double p=0, q=0, a=0, b=0, c=0;
 
        //numberofroots - счетчик корней
        int numberofroots=0;
 
        //ввод коэффициентов
        scanf("a = %f \n", a);
        scanf("b = %f \n", b);
        scanf("c = %f \n", c);
 
        //поиск корней
        numberofroots=rootsearch(a,b,c,p,q);
 
 
        //вывод нужного количества корней
        if (numberofroots==0) {
                printf("%s \n", "уравнение не имеет корней");
        } else {
                printf("p = %f \n",p);
                if (numberofroots==2) {
                        printf("q = %f \n",q);
                }
        }
}
C
1
2
3
//rootsearch.h
 
int rootsearch(double a, double b, double c, double p, double q);
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//rootsearch.c
 
#include <math.h>
#include "rootsearch.h"
 
int rootsearch (double a, double b, double c, double p, double q) {
 
        //если первый коэффициент нулевой
        if (a == 0) {
                p = - c / b;
                rootsearch = 1;
        } else {
        //если первый коэффициент не нулевой
 
                double d = 0;
 
                //нахождение дискриминанта
                d = b * b - 4 * a * c;
 
                //вычисление корней через дискриминант и запись результатов
                if (d < 0) {
                        return 0;
                } else {
                        if (d == 0) {
                                return 1;
                                p = - b / (2 * a);
                        } else {
                                return 2;
                                p = (- b + sqrt(d)) / (2 * a);
                                q = (-b - sqrt(d)) / (2 * a);
                        }
                }
        }
}
старался писать хороший код(с комментариями и т.д.), буду рад критике.
пробовал гуглить ошибку, ничего не нашел.
заранее спасибо за помошь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2018, 19:04
Ответы с готовыми решениями:

Как определить количество корней квадратного уравнения?
Если даны вещественные числа а,b,c, то как можно определить количество корней уравнения...

Вычисление корней квадратного уравнения
Приветик всем...) Я тут совсем недавно,вот помощь оч нужна, не могу зачеты получить! Помогите,чем...

Вычисление корней квадратного уравнения
1) Пишем функцию, которая переворачивает строку (массив типа char). Используйте цикл for, который...

Вычисление корней квадратного уравнения
решите кому не сложно... составить программу расчитывающую корни квадратного уравнения с учетом...

3
Модератор
Эксперт функциональных языков программированияЭксперт Python
37302 / 20736 / 4272
Регистрация: 12.02.2012
Сообщений: 34,125
Записей в блоге: 14
04.05.2018, 06:43 2
Объедини два кода в один:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stdio.h>
#include <math.h>
 
int rootsearch (double a, double b, double c, double p, double q) {
 
        //если первый коэффициент нулевой
        if (a == 0) {
                p = - c / b;
                rootsearch = 1;
        } else {
        //если первый коэффициент не нулевой
 
                double d = 0;
 
                //нахождение дискриминанта
                d = b * b - 4 * a * c;
 
                //вычисление корней через дискриминант и запись результатов
                if (d < 0) {
                        return 0;
                } else {
                        if (d == 0) {
                                return 1;
                                p = - b / (2 * a);
                        } else {
                                return 2;
                                p = (- b + sqrt(d)) / (2 * a);
                                q = (-b - sqrt(d)) / (2 * a);
                        }
                }
        }
}
 
 
int main() {
 
        //p,q - переменные для корней; a,b,c - коэффициенты
        double p=0, q=0, a=0, b=0, c=0;
 
        //numberofroots - счетчик корней
        int numberofroots=0;
 
        //ввод коэффициентов
        scanf("a = %f \n", a);
        scanf("b = %f \n", b);
        scanf("c = %f \n", c);
 
        //поиск корней
        numberofroots=rootsearch(a,b,c,p,q);
 
 
        //вывод нужного количества корней
        if (numberofroots==0) {
                printf("%s \n", "уравнение не имеет корней");
        } else {
                printf("p = %f \n",p);
                if (numberofroots==2) {
                        printf("q = %f \n",q);
                }
        }
}
Цитата Сообщение от yakevg Посмотреть сообщение
старался писать хороший код
- тем не менее, он не очень хорош. В частности - не надо сравнивать числа с плавающей точкой оператором "==". Лучше вместо if (a==b) писать if fabs(a-b)<=1.0e-16
1
4001 / 2548 / 428
Регистрация: 09.09.2017
Сообщений: 11,292
04.05.2018, 10:29 3
Лучший ответ Сообщение было отмечено yakevg как решение

Решение

Цитата Сообщение от yakevg Посмотреть сообщение
вот ошибка:
$ gcc main.c -o main
Действительно тут ошибка. rootsearch.c вы ведь не компилируете. Надо хотя бы так
Код
gcc main.c rootsearch.c -o main
А лучше и компилировать по отдельности. Через makefile:
Код
objects = main.o rootsearch.o
CXX = g++
CC = gcc
CFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2
CXXFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2
LDFLAGS = 
all:	$(objects)
	$(CXX) $(objects) $(LDFLAGS) -o main
clean:
	rm -f *.o
	rm -f main
%.o: %.c
	mkdir -p build
	$(CC) -c $(CFLAGS) $< -o $@
%.o: %.cpp
	$(CXX) -c $(CXXFLAGS) $< -o $@
Ну или хотя бы так
Код
gcc -c -Wall -Wextra -Werror -Os -gdwarf-2 main.c -o main.o 
gcc -c -Wall -Wextra -Werror -Os -gdwarf-2 rootsearch.c -o rootsearch.o 
gcc rootsearch.o main.o main
1
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 2
04.05.2018, 17:49  [ТС] 4
да, действительно, ошибка в том, что не компилировал rootsearch.c.
спасибо огромное всем за помощь и советы!
0
04.05.2018, 17:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2018, 17:49
Помогаю со студенческими работами здесь

Вычисление корней квадратного уравнения
Допустим я хочу написать функцию для вычисления корней квадратного уравнения. Она будет примерно...

Вычисление корней квадратного уравнения
Ну то есть, вот например есть программа, которая вычисляет корни квадратного уравнения: Program...

Вычисление корней квадратного уравнения
Язык С++, заранее благодарю :), желательно 98 версия Написать программу вычисления корней...

Вычисление корней квадратного уравнения
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { system(&quot;cls&quot;);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru