Начал изучать С++

Модератор: Модераторы разделов

Аватара пользователя
andreas90
Сообщения: 158
ОС: Bluewhite64 12.2

Начал изучать С++

Сообщение andreas90 »

Слез с винды, поставил слаку12 начал изучать с++. Начал с написания простой программы поиска корней квадратного уравнения и тут же столкнулся вот с чем
Код
#include <stdio.h>
#include <math.h>
int main(){
float a,b,c,x1,x2;
printf("Enter a\n");
scanf("%d", &a);
printf("Enter b\n");
scanf("%d", &b);
printf("Enter c\n");
scanf("%d", &c);
if ((b*b-4*a*c) < 0) printf("Error:discrimenant is negative. Solution cannot be found\n");
else printf("x1= %d\n", ((-b+sqrt(b*b-4*a*c))/2*a)) && printf("x2= %d\n", ((-b-sqrt(b*b-4*a*c))/2*a));
return 0;
}
компилятор не видит оператор sqrt
bash-3.1# gcc -o proga proga.cc
/tmp/cc0fnhEp.o: In function `main':
proga.cc:(.text+0x119): undefined reference to `sqrt'
proga.cc:(.text+0x1ad): undefined reference to `sqrt'
/tmp/cc0fnhEp.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: выполнение ld завершилось с кодом возврата 1

В чем я дурак?
"Ubuntu" is an ancient African word, that means "I can't configure Slackware"
Спасибо сказали:
Аватара пользователя
void_false
Сообщения: 198
Статус: Sergeant of Operations, IDF
ОС: Arch x86_32

Re: Начал изучать С++

Сообщение void_false »

Так С или С++?
Спасибо сказали:
Аватара пользователя
andreas90
Сообщения: 158
ОС: Bluewhite64 12.2

Re: Начал изучать С++

Сообщение andreas90 »

void_false писал(а):
29.02.2008 01:41
Так С или С++?

Я занимаюсь по книге Павловской с/c++ пока не разобрался в чем между ними разница, в книге этого не написано.
Если даже я меняю на <cmath> <cstdio> то так тоже не компилируется
"Ubuntu" is an ancient African word, that means "I can't configure Slackware"
Спасибо сказали:
Аватара пользователя
Dudraug
Сообщения: 313
ОС: Debian lenny/sid

Re: Начал изучать С++

Сообщение Dudraug »

gcc -o proga proga.cc -lm

и поверь это Си. от Си++ тут вообще ничо нет.
P4-3.0, ASUS P5GD1, 1024MB OЗУ, GeForce 6600GT
Спасибо сказали:
Аватара пользователя
andreas90
Сообщения: 158
ОС: Bluewhite64 12.2

Re: Начал изучать С++

Сообщение andreas90 »

Dudraug писал(а):
29.02.2008 02:14
gcc -o proga proga.cc -lm

и поверь это Си. от Си++ тут вообще ничо нет.


а почему он не видит sqrt?

Сделал вот что получилось
bash-3.1# gcc -o proga proga.cc -lm
/tmp/cc8A63eE.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: выполнение ld завершилось с кодом возврата 1
"Ubuntu" is an ancient African word, that means "I can't configure Slackware"
Спасибо сказали:
Аватара пользователя
Dudraug
Сообщения: 313
ОС: Debian lenny/sid

Re: Начал изучать С++

Сообщение Dudraug »

-lm ключик нужен для этих функций ога)

а тут уже ошибку надо в коде искать. наверное

>scanf("%d", &a);

не нравиться мне это
%f

так надо
P4-3.0, ASUS P5GD1, 1024MB OЗУ, GeForce 6600GT
Спасибо сказали:
Аватара пользователя
andreas90
Сообщения: 158
ОС: Bluewhite64 12.2

Re: Начал изучать С++

Сообщение andreas90 »

Dudraug писал(а):
29.02.2008 02:30
-lm ключик нужен для этих функций ога)

а тут уже ошибку надо в коде искать. наверное

>scanf("%d", &a);

не нравиться мне это
%f

так надо


Ага, стало получаться.Спасибо огромное, Dudraug . Продолжу изучать далее.
"Ubuntu" is an ancient African word, that means "I can't configure Slackware"
Спасибо сказали:
Аватара пользователя
void_false
Сообщения: 198
Статус: Sergeant of Operations, IDF
ОС: Arch x86_32

Re: Начал изучать С++

Сообщение void_false »

Код: Выделить всё

>scanf("%d", &a);

Никакой ошибки тут не вижу. Максимум предупреждение. У меня кстати компилится и с %d.
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Начал изучать С++

Сообщение promov »

В выводе корней квадратного уравнения нужно тоже писать %f, а не %d. Так положено (Согласно K&R функция sqrt возвращает значение типа double)
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
Hvzh
Сообщения: 711
Статус: Gone with Linux
ОС: Linux Mint 18.1

Re: Начал изучать С++

Сообщение Hvzh »

void_false писал(а):
29.02.2008 03:36

Код: Выделить всё

>scanf("%d", &a);

Никакой ошибки тут не вижу. Максимум предупреждение. У меня кстати компилится и с %d.

А при чем тут "компилится"? Компилиться и с "%s" будет наверняка. Проблема в типе данных, которые в функцию передаются
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Начал изучать С++

Сообщение Uncle_Theodore »

Детский сад -- штаны на лямках. Вот эта ошибка

/tmp/cc0fnhEp.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'

происходит от того, что файл с расширением .cc воспринимается компилятором как сырец C++, и соответственно, компилировать его надо не gcc'ём, а g++'ём. Но для автора это не имеет решающего значения, поскольку его код написан на C, а не на C++. Вы когда-нибудь научитесь различать эти языки, или так и будете кодить на суржике?

Про формат вывода со ссылкой на K&R понравилось. Афтар, пеши ищо. :)
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: Начал изучать С++

Сообщение eduard_pustobaev »

Uncle_Theodore писал(а):
29.02.2008 16:08
происходит от того, что файл с расширением .cc воспринимается компилятором как сырец C++, и соответственно, компилировать его надо не gcc'ём, а g++'ём.

Кстати уже n-ный раз на форуме всплывают темы с подобной ошибкой. Когда сырец .cc/.cpp с сишным кодом.
Про формат вывода со ссылкой на K&R понравилось. Афтар, пеши ищо. :)

А вы с ним первый раз сталкиваетесь? Поищите темы, порадуетесь...
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
wzrd
Сообщения: 323
ОС: Debian Lenny

Re: Начал изучать С++

Сообщение wzrd »

eduard_pustobaev писал(а):
29.02.2008 19:53
Кстати уже n-ный раз на форуме всплывают темы с подобной ошибкой. Когда сырец .cc/.cpp с сишным кодом.

это все из-за таких учебников как та которую читает автор. и вообще, я как-то плохо отношусь отношусь к книгам вида "программирование на С/С++". по мне книга должна быть или чисто для си, или только для плюсов, т.к. стили программирования в них разные.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Начал изучать С++

Сообщение deninok »

(andreas90) писал(а):Я занимаюсь по книге Павловской с/c++ пока не разобрался в чем между ними разница, в книге этого не написано.

В книге не написано, в чем разница между С и С++??? Удивительная книга...
Если ты собираешься изучать С++, то изучай именно его. На современном уровне С и С++ - это два разных языка. Они идут разными путями, поддерживаются и развиваются разными сообществами, уже не обладают (полной) взаимной совместимостью, имеют различающиеся стандарты и поддерживают различные парадигмы программирования. К сожалению, до сих пор бытует мнение о том, что "С и С++ - это почти одно и то же"...

Если тебе интересны книги по языку С++ как таковому, то посмотри список тут:
http://cpp.itrm.ru/?page_id=20
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Начал изучать С++

Сообщение promov »

Это что...
Открываем хвалёный задачник Н. Культин "C/C++ в задачах и примерах" (Санкт-Петербург, "БХВ-Петербург" 2007) Я уже писал где-то - у этого автора есть задачник по Pascal- задачи один к одному (ответы не сравнивал) Но это ладно

Как задачи они сойдут- на безрыбье и рак рыба. Решил какую-то задачу. Надо же решения проанализировать? Надо. Открываю ответы и вижу ответ другой, нежели у меня. Начинаю думать, в чём дело. Я уж потом догадываться начал- там ответы написаны именно на языке С++. И синтаксис иногда совпадает с языком С (задачки простые). А иногда нет. А когда ответ на С++, а где на С, не оговорено. Зато сколько нервов я потратил...
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
wzrd
Сообщения: 323
ОС: Debian Lenny

Re: Начал изучать С++

Сообщение wzrd »

что то ни разу не видел упоминания о самой хорошей книге по С/С++. Как программировать на С++, для новичка самое оно, моя первая книга именно она помогала мне во многом разобраться. книга по идее по C++, но на самом деле там и C, и C++... это конечно не хорошо, но это самое лучшее из книг по C/C++. а после неё можно уже и кернигана, и страуструпа почитать.

promov писал(а):
01.03.2008 00:06
Как задачи они сойдут- на безрыбье и рак рыба. Решил какую-то задачу. Надо же решения проанализировать? Надо. Открываю ответы и вижу ответ другой, нежели у меня. Начинаю думать, в чём дело. Я уж потом догадываться начал- там ответы написаны именно на языке С++. И синтаксис иногда совпадает с языком С (задачки простые). А иногда нет. А когда ответ на С++, а где на С, не оговорено. Зато сколько нервов я потратил...

а можете показать задачки и что за ответы на C++. мне просто интересно что вы под этим подразумеваете?
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Начал изучать С++

Сообщение promov »

Сейчас прибежит, не скажу кто... Опять начнётся "За базар не отвечаешь"... и прочее. Тьфу.
...Смотреть здесь задачник Н. Культин "C/C++ в задачах и примерах" (Санкт-Петербург, "БХВ-Петербург" 2007)
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
dey
Сообщения: 335
ОС: OpenSuse 11.1

Re: Начал изучать С++

Сообщение dey »

promov писал(а):
01.03.2008 01:13
Сейчас прибежит, не скажу кто... Опять начнётся "За базар не отвечаешь"... и прочее. Тьфу.
...Смотреть здесь задачник Н. Культин "C/C++ в задачах и примерах" (Санкт-Петербург, "БХВ-Петербург" 2007)

conio.h насколько я помню это хедер из борландовского RTL , и приведенный пример все таки на языке С
В сознательных действиях должен присутствовать существенный неалгоритмический компонент.
Roger Penrose,The Emperor's New Mind
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Начал изучать С++

Сообщение promov »

Значит, я ошибся.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
wzrd
Сообщения: 323
ОС: Debian Lenny

Re: Начал изучать С++

Сообщение wzrd »

promov писал(а):
01.03.2008 01:13
Сейчас прибежит, не скажу кто... Опять начнётся "За базар не отвечаешь"... и прочее. Тьфу.
...Смотреть здесь задачник Н. Культин "C/C++ в задачах и примерах" (Санкт-Петербург, "БХВ-Петербург" 2007)

я от C++ там вообще ничего не увидел. только лишь борланодвский устаревший хёдр.
Спасибо сказали:
Аватара пользователя
andreas90
Сообщения: 158
ОС: Bluewhite64 12.2

Re: Начал изучать С++

Сообщение andreas90 »

А ну я все понял, действительно надо компилить g++ если пишешь на с++.
Вот что пишет автор книги "Linux полное руководство" Колисниченко Д.Н.
"
Вызов gcc
Вы написали свою программу на c++? Нет проблем: компиляторы С и С++ являются интегрированными. Чтобы сообщить компилятору на каком языке вы написали свою программу, нужно указать определенную опцию при вызове компилятора. Но можно поступить проще; по умолчанию компилятор считает, что файлы с расширением .с написаны на языке С, файлы с расширением .C .cc .cXX на языках С++, а файлы с расширением .s на языке ассемблера.
Общие опции
Из общих опций наиболее интересны три: -x -c -o
C помощью опций можно указать язык, на котором написан исходный код, например
gcc -x c hello.c
В качестве языка программы вы можете указать:
с, если ваша программа написана на С
objective_c если программа написана на Objective C
c-header если программа является заголовком С
с++ если программа написана на С++
assembler, если вы написали программу на ассемблере"
Дан один пример
gcc -o helloworld helloworld.c

И не слова о g++
Я пытался сделать как написано в книге. Сам начал читать С/С++ Павловской всего 2 недели назад, до этого программированием вообще не занимался и юзал винду, не судите строго.


В общем, переписал я на с++, скомпилил вот так g++ -o proga proga.cc и все заработало.
Я конечно, парень необразованный еще, у меня щас 4 книги по c/c++ и ни в одной я не нашел главы "В чем различие C и C++", догадывюсь сам по различию в заголовочных файлах директив препроцессора.
"Ubuntu" is an ancient African word, that means "I can't configure Slackware"
Спасибо сказали:
Аватара пользователя
azrael
Сообщения: 73
ОС: KUbuntu 8.04 Hardy Heron

Re: Начал изучать С++

Сообщение azrael »

andreas90, gcc скажет, или g++. Какой из них где применять, уже написали выше.
Выдачу компилятора в студию.
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Начал изучать С++

Сообщение deninok »

(andreas90) писал(а):... у меня щас 4 книги по c/c++ и ни в одной я не нашел главы "В чем различие C и C++"...

И это идет только в минус авторам этих книг! Различия между С и С++ знать необходимо! И различия эти, надо сказать, весьма очевидны, поэтому лично я с большим недоверием отношусь к книгам по "С/С++". В моей библиотеке таких вообще нет, и я рад.
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Начал изучать С++

Сообщение v04bvs »

andreas90 писал(а):
02.03.2008 14:13
А ну я все понял, действительно надо компилить g++ если пишешь на с++.
Вот что пишет автор книги "Linux полное руководство" Колисниченко Д.Н.
"
Вызов gcc
Вы написали свою программу на c++? Нет проблем: компиляторы С и С++ являются интегрированными. Чтобы сообщить компилятору на каком языке вы написали свою программу, нужно указать определенную опцию при вызове компилятора. Но можно поступить проще; по умолчанию компилятор считает, что файлы с расширением .с написаны на языке С, файлы с расширением .C .cc .cXX на языках С++, а файлы с расширением .s на языке ассемблера.
Общие опции
Из общих опций наиболее интересны три: -x -c -o
C помощью опций можно указать язык, на котором написан исходный код, например
gcc -x c hello.c
В качестве языка программы вы можете указать:
с, если ваша программа написана на С
objective_c если программа написана на Objective C
c-header если программа является заголовком С
с++ если программа написана на С++
assembler, если вы написали программу на ассемблере"
Дан один пример
gcc -o helloworld helloworld.c

И не слова о g++


g++ отличается от gcc тем, что при вызове компоновщика указывает некоторые дополнительные библиотеки, специфичные для С++-кода. Например для использования iostreams. Можно их и руками указать, но через g++ удобнее.
Спасибо сказали:
Аватара пользователя
andreas90
Сообщения: 158
ОС: Bluewhite64 12.2

Re: Начал изучать С++

Сообщение andreas90 »

v04bvs,приведите пример как руками указать дополнительные библиотеки
"Ubuntu" is an ancient African word, that means "I can't configure Slackware"
Спасибо сказали:
Аватара пользователя
--=Civil696=--
Сообщения: 227
ОС: Gentoo o_O

Re: Начал изучать С++

Сообщение --=Civil696=-- »

andreas90 писал(а):
02.03.2008 18:31
v04bvs,приведите пример как руками указать дополнительные библиотеки

если я правильно понял вопрос то чтото вроде:

Код: Выделить всё

#include "путь к заголовочному файлу"



PS
да простят меня за оффтоп
wzrd, если вам хочется просто упоминания об этой книге...
То я например сейчас её читаю (только у меня 5-е малое издание) пока вроде вполне доступно.
Купил именно из-за того что гдето о ней именно как о "книге для самых самых начинающих" хорошие отзывы слышал
НЕ ПАНИКУЙ © ^_~
Спасибо сказали:
Аватара пользователя
andreas90
Сообщения: 158
ОС: Bluewhite64 12.2

Re: Начал изучать С++

Сообщение andreas90 »

--=Civil696=-- писал(а):
02.03.2008 19:07
andreas90 писал(а):
02.03.2008 18:31
v04bvs,приведите пример как руками указать дополнительные библиотеки

если я правильно понял вопрос то чтото вроде:

Код: Выделить всё

#include "путь к заголовочному файлу"



Я именно так и делал, но gcc(ом) программа у меня не компилировалась. Только g++
"Ubuntu" is an ancient African word, that means "I can't configure Slackware"
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Начал изучать С++

Сообщение v04bvs »

andreas90 писал(а):
02.03.2008 18:31
v04bvs,приведите пример как руками указать дополнительные библиотеки



Попробуйте -lstdc++
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Начал изучать С++

Сообщение drBatty »

deninok писал(а):
02.03.2008 15:50
поэтому лично я с большим недоверием отношусь к книгам по "С/С++"

+1
разница вот в чём: С++ это ООП, а просто Си - нет. Ну это грубо, конечно, так, приближённо.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
andreas90
Сообщения: 158
ОС: Bluewhite64 12.2

Re: Начал изучать С++

Сообщение andreas90 »

v04bvs писал(а):
02.03.2008 19:19
andreas90 писал(а):
02.03.2008 18:31
v04bvs,приведите пример как руками указать дополнительные библиотеки

Попробуйте -lstdc++


Да, вы правы. gcc -o proga proga.cc -lstdc++ действительно работает. Буду знать на будущее. Вы говорите "g++ отличается от gcc тем, что при вызове компоновщика указывает некоторые дополнительные библиотеки, специфичные для C++ кода". Если я вас правильно понял, это основное отличие gcc от g++? А сколько всего этих отличных библиотек и как они называются?


drBatty писал(а):
02.03.2008 19:21
deninok писал(а):
02.03.2008 15:50
поэтому лично я с большим недоверием отношусь к книгам по "С/С++"

+1
разница вот в чём: С++ это ООП, а просто Си - нет. Ну это грубо, конечно, так, приближённо.


Расшифруйте, пожалуйста, мне необразованному что такое ОПП
"Ubuntu" is an ancient African word, that means "I can't configure Slackware"
Спасибо сказали: