Форум русскоязычного сообщества Ubuntu


За новостями русскоязычного сообщества и Ubuntu в целом можно следить на нашей страничке в Google+

Автор Тема: Программирование на С++ в Geany  (Прочитано 18913 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн serebrus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Программирование на С++ в Geany
« : 25 Февраль 2010, 19:54:04 »
Помогите, пожалуйста. Пошла учиться в институт, там для программирования на С++ используют Borland, но у меня стоит Ubuntu 9.10, поэтому остановила свой выбор на Geany, мне показалось что он самый простой и без лишних наворотов.

Но маленький проблем, все время вываливаются мелкие несоответствия в написании кода, от совсем ерунды типа: iostream.h надо писать без .h, до более существенных, которые надо долго изучать что и к чему.

Может у меня что-то недоприкручено? Как сделать, чтобы соответствие было полным, не хочется возвращаться к Windows из-за такой ерунды.


Вот пример простейшей программки, предложенной преподавателем для теста:
#include <iostream>
using namespace std;                -этой строки вообще в исходнике быть не должно было
int main()              - а тут должно быть void main()
{
int a,b,S;
cout<<"Введите а=";
cin>>a;
cout<<"Введите b=";
cin >>b;
if(a>0 && b>0)
   {
   S=a*b;
      cout<<"Площадь S="<<S;
   }
else
   cout<<"Ошибка ввода длин сторон\n"; - здесь предлагалось вместо /n использовать endl, но его программа вообще не понимает?
   cout<<"Конец\n";

}

Но в исходном варианте не компилируется.

Учиться дома на одном, а в институте на лабах работать на другом??? это же тихий ужас.

Подскажите что-нибудь??

Может расскажите как под Wine Borland прикрутить?

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #1 : 25 Февраль 2010, 20:04:47 »
Для C++ есть единственно правильный стандартизирующий орган - ISO.

Пример простейшей программы правильный и компилируется без проблем, что с \n что с endl. Вот только что откуда этот бред, выделенный красным цветом?

Пользователь решил продолжить мысль 25 Февраль 2010, 14:09:07:
mamon@mamon-desktop:~/tmp/rrr$ cat tst.cxx
#include <iostream>
using namespace std;
int main()          
{
int a,b,S;
cout<<"Введите а=";
cin>>a;
cout<<"Введите b=";
cin >>b;
if(a>0 && b>0)
   {
   S=a*b;
      cout<<"Площадь S="<<S<< endl;
   }
else
   cout<<"Ошибка ввода длин сторон" << endl;
   cout<<"Конец"<< endl;

}
mamon@mamon-desktop:~/tmp/rrr$ g++ -Wall tst.cxx -o tst
mamon@mamon-desktop:~/tmp/rrr$ ./tst
Введите а=5
Введите b=10
Площадь S=50
Конец
« Последнее редактирование: 25 Февраль 2010, 20:10:23 от Mam(O)n »

Оффлайн serebrus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #2 : 25 Февраль 2010, 21:07:19 »
Зачем же сразу ругаться, ведь ясно что сюда заходят спрашивать отнюдь не монстры программирования... :'(

А красным я выделила строки потому, что так должно было быть написано по мнению педагога, который как раз не первый год программирует на С++

Если гуглить хваленый интернет, то там в качестве первого простейшего примера выложено:


    #include <iostream.h>

    void main(void)

    {
       cout << "Учимся программировать на языке C++!";
    }


Если данное ввести в Geany, то компилятор выдаст кучу ошибок:

Proba2.cpp:1:22: error: iostream.h: No such file or directory
Proba2.cpp:2: error: ‘::main’ must return ‘int’
Proba2.cpp: In function ‘int main()’:
Proba2.cpp:4: error: ‘cout’ was not declared in this scope
Сборка завершилась с ошибкой.


А вот если чуток подправить...

#include <iostream>
using namespace std;
int main()
{
cout <<"Учимся программировать на языке C++!";
}


то компиляция проходит, но на экран требуемый текст все равно не выводится??

Так что если не будете ругаться, а посоветуете что толковое, буду весьма признательна.

endl действительно прошел, видимо где-то до этого напортачила  :P

Оффлайн Упс

  • Старожил
  • *
  • Сообщений: 3231
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #3 : 25 Февраль 2010, 21:54:55 »
Как раз в geany.
using namespace std;
int main()
{
cout <<"Учимся программировать на языке C++!";
}
Результат  -  Учимся программировать на языке C++!

Цитировать
Для C++ есть единственно правильный стандартизирующий орган - ISO.
#include <iostream.h> так было давно.
#include <iostream> теперь так не зависимо в лин или в вин.

Цитировать
А красным я выделила строки потому, что так должно было быть написано по мнению педагога, который как раз не первый год программирует на С++

Наверное очень давно програмирует.
xUbuntu 12.04

Оффлайн serebrus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #4 : 25 Февраль 2010, 22:12:19 »
Честно, не знаю почему последняя не сразу сработала, сейчас запустилась, хотя я ничего и не исправляла??

Но ведь строка с  void main() - выложена в куче примеров из интернета, а начинать надо с int main()??

А в целом, если честно, как вы видите из моих вопросов, я только начинаю... и меня главное интересует, чтобы не было различий при программировании в Geany и в Borland. А с остальным разберусь как-нибудь ;)  А то будет полный абзац на лабораторных в институте, там-то будет стоять Borland... так что если есть разница в синтаксисе, придется искать машину с виндой  :-\

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #5 : 25 Февраль 2010, 22:14:48 »
Извиняюсь, но когда писал думал, что "бред" в данном контексте это исконно литературное выражение но никак не ругательная форма. Если что, то простите пожалуйста, намерения мои были совершенно безобидно - образовательные, но никак не иронической направленности.  :angel:


Насчёт педагога. Язык C++ придуман был Бьярном Страуструпом в начале 1980-х годах не у нас в России. Вся техническая информация на то время по большому счёту доставалась нам из уст в уста и методом научного тыка, которая в дальнейшем конспектировалась и иногда выливалась в учебные пособия некоторых профессоров в качестве очередной галочки. В качестве компилятора для того времени был стандартом де-факто - borland c. Других компиляторов просто боялись, т.к. в те времена компиляторы разных фирм и даже версий не блестали совместимостью между собой. К сожалению, погрязнув в 90-х Россия не продвинулась в плане инноваций в образовании и не блещет актуальностью курса в образовательных процессах особенно в сфере информационных технологий, направление развития которых меняется чуть ли не каждый год. Но с того времени уже много воды утекло и было принято два международных стандарта, один в 1998 году (ISO/IEC 14882:1998 C++), другой в 2003 году (ISO/IEC 14882:2003 C++). И вот-вот уже на подходе новая версия стандарта (кодовое имя - C++0X). Но к сожалению, образовательные курсы никто переписывать не собирается и педагогический состав в силу своего категорического отрицания всего нового, редко от него отступает. Так и приходится метаться между обязательным неактуальным курсом и самообучением по текущим реалиям. Хорошо, что на данный момент в некоторых учебных заведениях текущие реалии начинают наконец-то пробивать железный занавес.

Если смотреть с современной стороны, то по тому коду следующие комментарии:
1. Namespaces является частью стандарта с момента его первого опубликования.
2. Стандарт гласит: "All library entities are defined within namespace std.", что в переводе означает: "Все сущности стандартной библиотеки C++ должны быть заключены в пространство имён std". Поэтому, например в отношении cout нужно либо использовать глобальное (в пределах одной копмилируемой единицы) объявление use namespace std либо использовать оператор расширения видимости, например std::cout.
3. У заголовков стандартной библиотеки расширения .h по стандарту нет. Но некоторые компиляторы оставляют на своё усмотрение возможность использования .h на конце имени заголовка стд. библиотеки.
4. Функция main() всегда должна возращать int. Пруфлинк с отсылкой на стандарт.

А вот если чуток подправить...

#include <iostream>
using namespace std;
int main()
{
cout <<"Учимся программировать на языке C++!";
}


то компиляция проходит, но на экран требуемый текст все равно не выводится??
Всё правильно поправлено. И компилируется и работает:
mamon@mamon-desktop:~/tmp/rrr$ cat tst.cxx
#include <iostream>
using namespace std;
int main()
{
cout <<"Учимся программировать на языке C++!";
}
mamon@mamon-desktop:~/tmp/rrr$ g++ tst.cxx -o tst -Wall
mamon@mamon-desktop:~/tmp/rrr$ ./tst
Учимся программировать на языке C++!

Я думаю, что стоит начинать изучать с++ не сразу с IDE а с самих основ. Например используя простой текстовый редактор, компилятор. В дальнейшем make-файлы. А потом браться уже за IDE. Ведь не зная основ можно в IDE запутаться конкретно.


зы. Видел я недавно, программу банк-клиента, написанную на MS Access, с некоторыми модулями работающими в режиме MS-DOS. Написана она кстати была во времена, когда уже про Windows XP потихоньку стали забывать. Вот это и есть результат нашего современного образования.


Оффлайн serebrus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #6 : 25 Февраль 2010, 23:42:08 »
Вот, спасибо за толковый ответ, да еще и ссылочка хорошая про void и int, теперь "распоняла" я... вся такая непонятливая  :D

Будете смеяться, но книжечка у меня 2007 года издания, написана самим преподающим педагогом, там все с void и нигде нет std, так что программки не компилируются в Geany, возможно, в Borland 3.1 такое проскакивает...

А переходить на простой редактор + компилятор не очень рвусь и тут все удобненько...

Спасибо, в целом все ясненько, так что тему можно закрыть  :)

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #7 : 25 Февраль 2010, 23:45:40 »
компилируются в Geany
Открою страшную тайну: в Geany нет компилятора ;)

Оффлайн serebrus

  • Автор темы
  • Любитель
  • *
  • Сообщений: 54
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #8 : 25 Февраль 2010, 23:56:58 »
Упс..

А что же там за страшные слова: "Скомпилировать"??????  Врут что ли?

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #9 : 26 Февраль 2010, 00:13:05 »
Нет, просто встроенного компилятора нет. По дефолту там настроена работа на использование компилятора из набора GNU Compiler Collection (GCC), который совсем не часть geany. По этому нельзя сказать, что скомпилировано geany, netbeans, eclipse или чего еще там, т.к. они не имеют встроенного компилятора и главная работа в этом направлении ведётся не IDE, а именно внешней программой. А компиляторы бывают разные, но всё же в linux в основном используют набор GCC.

А вообще, каждая хорошая IDE должна уметь пользоваться несколькими типами и реализациями компиляторов.

Пользователь решил продолжить мысль 26 Февраль 2010, 00:58:47:
Borland 3.1 такое проскакивает...
К сведению. Borland C++ 3.1 был выпущен аж в 92 году прошлого века.
« Последнее редактирование: 26 Февраль 2010, 00:58:47 от Mam(O)n »

Оффлайн little_bit

  • Новичок
  • *
  • Сообщений: 48
  • Duke Nukem must die !!!
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #10 : 26 Февраль 2010, 03:08:09 »
Чисто замечание - Borland C++ 3.1 прекрасно работает в линуксе из-под DOSBox , это эмулятор DOS'а, он есть в репах. 
ГЫ ну и православный hello world кмк, должен выглядеть как-то так ))) :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define _S "Hello, World\n"

int main(int argc, char** argv)
{
     exit (printf(_S) == strlen(_S) ? 0 : 1);
}

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #11 : 26 Февраль 2010, 03:19:23 »
Чисто замечание - Borland C++ 3.1 прекрасно работает в линуксе из-под DOSBox , это эмулятор DOS'а, он есть в репах. 
Чище чистого позволю заметить, что есть некоторые косяки при установке BC под DOSBOX. Установочные файлы и место установки должны находится на разных дос-дисках, иначе можно нарваться на "too many subdirectory". Кстати под вайном опять же не работает нормально WIN версия. Не компилит, с ошибкой вываливает.

ГЫ ну и православный hello world кмк, должен выглядеть как-то так ))) :
Православно, но это уже не ++.

Пользователь решил продолжить мысль 26 Февраль 2010, 04:02:08:
Кстати по поводу int vs void в main() я нарвался на интересный коммент в том-же блоге:
Цитировать
Несомненно, корректно возвращать int, а void использовать некорректно - так утверждает стандарт, и с этим не поспоришь. Некоторые компиляторы считают void main синтаксической ошибкой. Но посмотрим, к чему приводит указание void в компиляторах, где это возможно.

Предполагаю, что в большинстве компиляторов функция main возвращает int вне зависимости от того, как объявить её у себя в программе - так как функция main вызывается кодом, стартующем программу, а код этот в большинстве компиляторов берётся из библиотеки. И в этой библиотеке main считается возвращающей int. Соответственно, и после вызова main стартующий код хочет получить (и получает) код возврата (на х86 как правило, содержимое AX/EAX).

Соответственно, объявив void main мы в результате выполнения программы вернём операционной системе случайное число (в данном контексте - неизвестное). Вот поэтому компилятор и пишет варнинги... Узнать, так это или нет просто - достаточно посмотреть, какие значения возвращают системе скомпилированные с void программы.
« Последнее редактирование: 26 Февраль 2010, 04:02:08 от Mam(O)n »

Оффлайн little_bit

  • Новичок
  • *
  • Сообщений: 48
  • Duke Nukem must die !!!
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #12 : 26 Февраль 2010, 04:13:39 »
Цитировать
... что есть некоторые косяки при установке BC под DOSBOX
Гммм, мне как-то вроде нормально удалось все это запустить, хотя если чесно я это ставил чисто из ностальгии, без всяких целей и уже давно. Ну и кстате там же можно несколько дисков прописать, не ?

Цитировать
Православно, но это уже не ++
да, условия задачи не соблюдены )))
« Последнее редактирование: 26 Февраль 2010, 04:18:39 от little_bit »

Оффлайн Mam(O)n

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #13 : 26 Февраль 2010, 04:20:23 »
Ну и кстате там же можно несколько дисков прописать, не ?
Именно так и пришлось делать. Дистрибутив подмонтировал к A:\. А каталог для установки - к C:\. И всё пошло-поехало.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Программирование на С++ в Geany
« Ответ #14 : 26 Февраль 2010, 05:13:29 »
Mam(O)n все верно сказал. Только вот преподов таких надо по йайцам пинать со всего размаха. Дай ему чтоли стандарт поштудировать. =)
Кстати хоть стандарт и на английском языке читается он без особого напряга. Есть даже анекдот на эту тему
Программиста спрашивают как он так быстро выучил английский язык.
- Да это ерунда. Они там почти все слова из С++ взяли.

Есть довольно оригинальный дядечка который имеет перевод стандарта на русский язык. Скоро думает опубликовать книжку.
http://zouev.blogspot.com/ вот его блог.

 

Страница сгенерирована за 0.065 секунд. Запросов: 24.