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

Узнай цену своей работы

Формулировка задачи:

вот ошибка: $ 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
Листинг программы
  1. //main.c
  2. #include
  3. #include "rootsearch.h"
  4. int main() {
  5. //p,q - переменные для корней; a,b,c - коэффициенты
  6. double p=0, q=0, a=0, b=0, c=0;
  7. //numberofroots - счетчик корней
  8. int numberofroots=0;
  9. //ввод коэффициентов
  10. scanf("a = %f \n", a);
  11. scanf("b = %f \n", b);
  12. scanf("c = %f \n", c);
  13. //поиск корней
  14. numberofroots=rootsearch(a,b,c,p,q);
  15. //вывод нужного количества корней
  16. if (numberofroots==0) {
  17. printf("%s \n", "уравнение не имеет корней");
  18. } else {
  19. printf("p = %f \n",p);
  20. if (numberofroots==2) {
  21. printf("q = %f \n",q);
  22. }
  23. }
  24. }
Листинг программы
  1. //rootsearch.h
  2. int rootsearch(double a, double b, double c, double p, double q);
Листинг программы
  1. //rootsearch.c
  2. #include
  3. #include "rootsearch.h"
  4. int rootsearch (double a, double b, double c, double p, double q) {
  5. //если первый коэффициент нулевой
  6. if (a == 0) {
  7. p = - c / b;
  8. rootsearch = 1;
  9. } else {
  10. //если первый коэффициент не нулевой
  11. double d = 0;
  12. //нахождение дискриминанта
  13. d = b * b - 4 * a * c;
  14. //вычисление корней через дискриминант и запись результатов
  15. if (d < 0) {
  16. return 0;
  17. } else {
  18. if (d == 0) {
  19. return 1;
  20. p = - b / (2 * a);
  21. } else {
  22. return 2;
  23. p = (- b + sqrt(d)) / (2 * a);
  24. q = (-b - sqrt(d)) / (2 * a);
  25. }
  26. }
  27. }
  28. }
старался писать хороший код(с комментариями и т.д.), буду рад критике. пробовал гуглить ошибку, ничего не нашел. заранее спасибо за помошь

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

textual
Листинг программы
  1. objects = main.o rootsearch.o
  2. CXX = g++
  3. CC = gcc
  4. CFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2
  5. CXXFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2
  6. LDFLAGS =
  7. all: $(objects)
  8. $(CXX) $(objects) $(LDFLAGS) -o main
  9. clean:
  10. rm -f *.o
  11. rm -f main
  12. %.o: %.c
  13. mkdir -p build
  14. $(CC) -c $(CFLAGS) $< -o $@
  15. %.o: %.cpp
  16. $(CXX) -c $(CXXFLAGS) $< -o $@

Объяснение кода листинга программы

  1. objects = main.o rootsearch.o — это список объектов, которые нужно собрать. В данном случае, программа состоит из двух файлов: main.c и rootsearch.c.
  2. CXX = g++ — это настройка, которая указывает компилятору, что мы собираем программу на C++, а не на C.
  3. CC = gcc — это настройка, которая указывает компилятору, что мы собираем программу на C, а не на C++.
  4. CFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2 — это настройки компилятора для языка C. Здесь мы включаем все предупреждения, отключаем оптимизацию и включаем отладку.
  5. CXXFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2 — это настройки компилятора для языка C++. Здесь мы включаем все предупреждения, отключаем оптимизацию и включаем отладку.
  6. LDFLAGS = — это настройки линковщика. Здесь нет никаких значений, потому что мы не используем внешние библиотеки.
  7. all: $(objects) — это цель, которую выполняет компилятор. Здесь мы просто указываем, что должны быть собраны все объекты.
  8. clean: rm -f *.o — это цель, которую выполняет компилятор при очистке. Здесь мы удаляем все объектные файлы.
  9. %.o: %.c — это правило для сборки объектных файлов из исходных файлов. Здесь мы указываем, что для каждого файла .c должен быть создан соответствующий файл .o.
  10. %.o: %.cpp — это правило для сборки объектных файлов из исходных файлов. Здесь мы указываем, что для каждого файла .cpp должен быть создан соответствующий файл .o.
  11. mkdir -p build — это команда для создания директории build, если она еще не существует.
  12. $(CC) -c $(CFLAGS) $< -o $@ — это команда для компиляции исходного файла и создания соответствующего объектного файла. Здесь мы используем компилятор C и включаем все настройки компилятора.
  13. $(CXX) -c $(CXXFLAGS) $< -o $@ — это команда для компиляции исходного файла и создания соответствующего объектного файла. Здесь мы используем компилятор C++ и включаем все настройки компилятора.
  14. objects = main.o rootsearch.o — это список объектов, которые нужно собрать. В данном случае, программа состоит из двух файлов: main.c и rootsearch.c.
  15. CXX = g++ — это настройка, которая указывает компилятору, что мы собираем программу на C++, а не на C.
  16. CC = gcc — это настройка, которая указывает компилятору, что мы собираем программу на C, а не на C++.
  17. CFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2 — это настройки компилятора для языка C. Здесь мы включаем все предупреждения, отключаем оптимизацию и включаем отладку.
  18. CXXFLAGS = -Wall -Wextra -Werror -Os -gdwarf-2 — это настройки компилятора для языка C++. Здесь мы включаем все предупреждения, отключаем оптимизацию и включаем отладку.
  19. LDFLAGS = — это настройки линковщика. Здесь нет никаких значений, потому что мы не используем внешние библиотеки.
  20. all: $(objects) — это цель, которую выполняет компилятор. Здесь мы просто указываем, что должны быть собраны все объекты.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы