Можно ли научиться программированию самостоятельно,по книгам? (подскажите самый легкий язык которому можно научиться и полезную литер)
Модератор: Модераторы разделов
-
alex1974
- Сообщения: 5
Re: Можно ли научиться программированию самостоятельно,по книгам?
спасибо вам всем за комменты!!!читал с интересом...сделал определенные выводы,ищу подходящую литературу...вот найти только сложновато,нужное..я ведь абсолютно в этом ничего не понимаю..полный ноль...
-
Clear_Mind
- Сообщения: 241
- Статус: Изредко заглядывающий
- ОС: openSuSE 11.1
Re: Можно ли научиться программированию самостоятельно,по книгам?
Ну началось
Любят люди поразглагольствовать.
я сам выучил С++ по книге Страуструпа.
Любят люди поразглагольствовать.
я сам выучил С++ по книге Страуструпа.
Bombers launch with no recall + Minutes warning of the missile fall
Take a look at your last sky + Guessing you won't have the time to cry
--- Iron Maiden (Brouther Than A Thousand Suns, 2006)
Take a look at your last sky + Guessing you won't have the time to cry
--- Iron Maiden (Brouther Than A Thousand Suns, 2006)
-
oav
- Бывший модератор
- Сообщения: 296
Re: Можно ли научиться программированию самостоятельно,по книгам?
Clear_Mind писал(а): ↑19.10.2006 14:25Ну началось![]()
Любят люди поразглагольствовать.
я сам выучил С++ по книге Страуструпа.
Везет, поздравляю! Я вот сколько не пытаюсь - все равно не выходит, постоянно какие-то непонятные вещи нахожу
-
georgy_sh
- Сообщения: 1172
- Статус: thermonuclear...
- ОС: GNU/Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
дык есть же Лафоре
у него прекрасная книга
-
Ballantre
- Сообщения: 114
- ОС: Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
А еще есть Дейтел. И Прата. На мой взгляд, - самые полезные книги для учебы.
Я двадцать лет знал его и всегда ненавидел, и всегда восхищался, и всегда по-рабски боялся его.
-
Заусениц
- Сообщения: 69
- ОС: BSD|Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
Что бы выучить по книге, книгу мало читать. Нужно что бы в книге были хорошие задачи, а задачи нужно решать. А еще нужно знать для чего учишь и хотеть выучить. Иначе полученые знания будут благополучно забыты.
-
Ballantre
- Сообщения: 114
- ОС: Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
Не знаю как в большинстве книг, но у Дейтела есть много очень хороших примеров, по которым реально можно понять именно идеологию языка. Причем не только С++, но и многих других, ведь Дейтел - автор активный.
Я двадцать лет знал его и всегда ненавидел, и всегда восхищался, и всегда по-рабски боялся его.
-
georgy_sh
- Сообщения: 1172
- Статус: thermonuclear...
- ОС: GNU/Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
ну в Лафоре тоже примеры есть, так же, как и упражнения
но к своему стыду Дейтела не читал...
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Можно ли научиться программированию самостоятельно,по книгам?
вы так ничего и не поняли, да?- Везет, поздравляю! Я вот сколько не пытаюсь - все равно не выходит, постоянно какие-то непонятные вещи нахожу
- дык есть же Лафоре, у него прекрасная книга
ну да ладно...
хотя..... /me взглянул на свое поколение с еще большей печалью....
слава роботам!
-
georgy_sh
- Сообщения: 1172
- Статус: thermonuclear...
- ОС: GNU/Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
elide писал(а): ↑19.10.2006 23:47вы так ничего и не поняли, да?- Везет, поздравляю! Я вот сколько не пытаюсь - все равно не выходит, постоянно какие-то непонятные вещи нахожу
- дык есть же Лафоре, у него прекрасная книга
ну да ладно...
хотя..... /me взглянул на свое поколение с еще большей печалью....
а почему Вы так говорите?
а у Вас какое мнение насчет Лафоре?
поверьте, мне интересно послушать мнение знающего человека
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Можно ли научиться программированию самостоятельно,по книгам?
He1mut, скажи мне пожалуйста, что делает вот такой вот код на С++, как его можно было бы использовать
Код: Выделить всё
struct A {
A(const volatile void**);
};
char f(A);
int f(...);
template <typename T> struct WTF {
static const int _ = (sizeof(f(*(T*)0))==sizeof(char));
};слава роботам!
-
georgy_sh
- Сообщения: 1172
- Статус: thermonuclear...
- ОС: GNU/Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
elide писал(а): ↑20.10.2006 01:06He1mut, скажи мне пожалуйста, что делает вот такой вот код на С++, как его можно было бы использоватьКод: Выделить всё
struct A { A(const volatile void**); }; char f(A); int f(...); template <typename T> struct WTF { static const int _ = (sizeof(f(*(T*)0))==sizeof(char)); };
Matt Marcus рулит! Баян!!!
Кстати, вразумительного ответа на эту задачку дать не смог. Могу только предположить, что код сравнивает тип аргумента WTF с типом A.
В любом случае хочется услышать вразумительный ответ.
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Можно ли научиться программированию самостоятельно,по книгам?
мне просто думать было лень. написал первое вспомнившееся. но, хоть и баян, а на вопрос ты так и не ответил.......
это ответ на твой вопрос:
когда oav, владеющий С++ много лучше, чем кто-либо из засветившихся на этом форуме, говорит, что постоянно находит в этом языке что-то новое, удивительное и даже непонятное, то советовать прочитать "прекрасную книгу" Лафоре и все понять - крайне глупо.
а уж говорить "я сам выучил С++", а не "я сам учу С++"... ну-ну...
вот ты прочитал прекрасную книгу... и что?
ладно, засчитав тебе -1 очко, вопрос с определением имеет ли тип T A своим предком закроем.
вот тебе совсем элементарный вопрос (он мало того, что крайне прост, так еще и рассмотрен практически в каждой книжке):совсем простой код, правда?
вот что он _должен_ делать, а что он _на самом деле_ делает. и почему, ага. это классика.
а вообще, если тебе когда-нибудь покажется, что ты знаешь с++, приходи (:
я знаю, как это лечить.....
это ответ на твой вопрос:
когда oav, владеющий С++ много лучше, чем кто-либо из засветившихся на этом форуме, говорит, что постоянно находит в этом языке что-то новое, удивительное и даже непонятное, то советовать прочитать "прекрасную книгу" Лафоре и все понять - крайне глупо.
а уж говорить "я сам выучил С++", а не "я сам учу С++"... ну-ну...
вот ты прочитал прекрасную книгу... и что?
ладно, засчитав тебе -1 очко, вопрос с определением имеет ли тип T A своим предком закроем.
вот тебе совсем элементарный вопрос (он мало того, что крайне прост, так еще и рассмотрен практически в каждой книжке):
Код: Выделить всё
int i = 0;
cout << ++i << ++i << ++i << endl;вот что он _должен_ делать, а что он _на самом деле_ делает. и почему, ага. это классика.
а вообще, если тебе когда-нибудь покажется, что ты знаешь с++, приходи (:
я знаю, как это лечить.....
слава роботам!
-
edoc_modnar
- Бывший модератор
- Сообщения: 1638
- Статус: Форум больше не посещаю
Re: Можно ли научиться программированию самостоятельно,по книгам?
elide
Вот поэтому я всеми фибрами своей жалкой человеческой душонки ненавижу этот езыг (:
Вот поэтому я всеми фибрами своей жалкой человеческой душонки ненавижу этот езыг (:
So long, and thanks for all the fish.
Douglas Adams, The Hitchhiker's Guide to the Galaxy
-
n2j2r
- Сообщения: 494
- Статус: najar
Re: Можно ли научиться программированию самостоятельно,по книгам?
elide писал(а): ↑20.10.2006 03:09вот тебе совсем элементарный вопрос (он мало того, что крайне прост, так еще и рассмотрен практически в каждой книжке):
совсем простой код, правда?Код: Выделить всё
int i = 0; cout << ++i << ++i << ++i << endl;
вот что он _должен_ делать, а что он _на самом деле_ делает. и почему, ага. это классика.
а вообще, если тебе когда-нибудь покажется, что ты знаешь с++, приходи (:
я знаю, как это лечить.....
как и показалось на первый взгляд выводит 123...
в чем подвох?
-
iAm
- Сообщения: 220
- ОС: Gentoo
Re: Можно ли научиться программированию самостоятельно,по книгам?
alex1974, конечно можно. Только не просто читать книгу и запоминать все - не получится. Это что учить иностранный язык - можно прочитать весь самоучитель и запоминать все слова по ходу чтения, которые потом один черт забудешь, а можно изучить грамматику и пойти читать какую-нибудь книжку (жанр уже на свой вкус), или на форумах общаться на изучаемом языке - повторяемость употребляемых слов заставляет волей-неволей запоминать слова.
Если перевести аналогии с живого языка на язык программирования, то нужно заучить "грамматику", т.е. элементарные основы. Затем поставить цель (локальныую), например, написать простую программу. Естесственно ее разделив мысленно на блоки и записав на листочке (так проще понять что нужно сделать и что уже сделано). А потом думаете уже, как сделать этот блок, а потом воооон тот еще.
Начинал я с PHP - очень простой язык (замечу, я не профессиональный программист). Правда при переходе на C++ меня очень и очень жутко бесило жесткое определение типа переменной (хотя я и понимал, что это правильно и так и должно быть).
Т.е. на PHP можно было написать так:
на C++ (да и на Pascal) так сделать нельзя (насколько мне известно).
Если перевести аналогии с живого языка на язык программирования, то нужно заучить "грамматику", т.е. элементарные основы. Затем поставить цель (локальныую), например, написать простую программу. Естесственно ее разделив мысленно на блоки и записав на листочке (так проще понять что нужно сделать и что уже сделано). А потом думаете уже, как сделать этот блок, а потом воооон тот еще.
Начинал я с PHP - очень простой язык (замечу, я не профессиональный программист). Правда при переходе на C++ меня очень и очень жутко бесило жесткое определение типа переменной (хотя я и понимал, что это правильно и так и должно быть).
Т.е. на PHP можно было написать так:
Код: Выделить всё
$my_varuable = 3;
$my_varuable = "Hello, World";на C++ (да и на Pascal) так сделать нельзя (насколько мне известно).
-
rolano
- Сообщения: 845
- Статус: еще один юзер FreeBSD
- ОС: какая-то
Re: Можно ли научиться программированию самостоятельно,по книгам?
2 elide
Можно, наверное, найти и более DZENствующие примеры, но дело ведь в том, что такие жонглирования нужны далеко не всем. Человек учит этот гребаный язык не для того, чтобы потом пребывать в Нирване, а чтобы решать конкретные задачи. И если ему надо будет определить наличие "родственных" отношений между типами, то при приложении должных усилий он обязательно найдет решение. В голове закрепляется то, что востребовано, а не то, что прочитано.
Можно, наверное, найти и более DZENствующие примеры, но дело ведь в том, что такие жонглирования нужны далеко не всем. Человек учит этот гребаный язык не для того, чтобы потом пребывать в Нирване, а чтобы решать конкретные задачи. И если ему надо будет определить наличие "родственных" отношений между типами, то при приложении должных усилий он обязательно найдет решение. В голове закрепляется то, что востребовано, а не то, что прочитано.
Я знаю только то, что ничего не знаю ... потому и обречен вечно учиться.
-
georgy_sh
- Сообщения: 1172
- Статус: thermonuclear...
- ОС: GNU/Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
elide
Вы уж простите меня, но ни в одном из своих постов я не писал, что знаю С++. По-моему, всем тут известно, что в нем я полный ламер.
Более того, забаньте меня, если найдете ссылку хоть на одно сообщение, в котором я умничаю или косвенно намекаю на то, что знаю С++.
Кто говорил, что я прочитал всего Лафоре?
Лафоре я читаю, стараюсь все повнимательнее изучать. Тем паче, преподаватели рекомендуют этот учебник. Так же там описываются самые азы программирования на С++. И это мое мнение. Таким образом, почему бы мне не выразить свое ИМХО? Мне, как новичку, все понятно в нем по мере изучения. Вот я и хочу, чтобы мое мнение, как многих других выслушали, а затем приобрели только ту литературу, которая, по их мнению, действительно УЧИТ программированию.
Так что Вы далеко не правы.
Вы уж извините, а вот это действительно очень обидно. Когда я такое говорил? Почему Вы так грубите?
Инкремент стоит в префиксной форме, а следовательно сначала увеличивается на единицу значение переменной, а затем полученной значение выводится в стандартный поток вывода - то бишь на наш экран.
Но вот какая петрушка:
Вот Вы программист. Дык расскажите, пожалуйста, о таком поведении программы.
Может быть, тут что-то связано с тем, что операция ++ имеет высокий приоритет, и выполняется справа налево???
Вы уж простите меня, но ни в одном из своих постов я не писал, что знаю С++. По-моему, всем тут известно, что в нем я полный ламер.
Более того, забаньте меня, если найдете ссылку хоть на одно сообщение, в котором я умничаю или косвенно намекаю на то, что знаю С++.
Кто говорил, что я прочитал всего Лафоре?
Лафоре я читаю, стараюсь все повнимательнее изучать. Тем паче, преподаватели рекомендуют этот учебник. Так же там описываются самые азы программирования на С++. И это мое мнение. Таким образом, почему бы мне не выразить свое ИМХО? Мне, как новичку, все понятно в нем по мере изучения. Вот я и хочу, чтобы мое мнение, как многих других выслушали, а затем приобрели только ту литературу, которая, по их мнению, действительно УЧИТ программированию.
Так что Вы далеко не правы.
а уж говорить "я сам выучил С++", а не "я сам учу С++"... ну-ну...
Вы уж извините, а вот это действительно очень обидно. Когда я такое говорил? Почему Вы так грубите?
Код: Выделить всё
int i = 0;
cout << ++i << ++i << ++i << endl;Инкремент стоит в префиксной форме, а следовательно сначала увеличивается на единицу значение переменной, а затем полученной значение выводится в стандартный поток вывода - то бишь на наш экран.
Но вот какая петрушка:
Код: Выделить всё
he1mut@debian:~$ cat code.cpp
#include <iostream>
using namespace std;
int main()
{
int i = 0;
cout << ++i << ++i << ++i << endl;
return 0;
}
he1mut@debian:~$ g++ code.cpp -o test
he1mut@debian:~$ ./test
333
he1mut@debian:~$Вот Вы программист. Дык расскажите, пожалуйста, о таком поведении программы.
Может быть, тут что-то связано с тем, что операция ++ имеет высокий приоритет, и выполняется справа налево???
-
rolano
- Сообщения: 845
- Статус: еще один юзер FreeBSD
- ОС: какая-то
Re: Можно ли научиться программированию самостоятельно,по книгам?
в Визуал Си++ 6.0. Консольный проект.
#include "stdafx.h"
#include <iostream.h>
int main(int argc, char* argv[])
{
int i = 0;
cout << ++i << ++i << ++i << endl;
return 0;
}
Результат:
321
Складывается мнение, что тут не трабла языка, а трабла конкретной реализации.
#include "stdafx.h"
#include <iostream.h>
int main(int argc, char* argv[])
{
int i = 0;
cout << ++i << ++i << ++i << endl;
return 0;
}
Результат:
321
Складывается мнение, что тут не трабла языка, а трабла конкретной реализации.
Я знаю только то, что ничего не знаю ... потому и обречен вечно учиться.
-
georgy_sh
- Сообщения: 1172
- Статус: thermonuclear...
- ОС: GNU/Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
О! УРА!
Все-таки дело действительно в приоритете операций. Вот так все работает:
Вот так выводит 1 2 3
))
Все-таки дело действительно в приоритете операций. Вот так все работает:
Код: Выделить всё
int i = 0;
cout << ++i << endl;
cout << ++i << endl;
cout << ++i << endl;Вот так выводит 1 2 3
-
Hvzh
- Сообщения: 711
- Статус: Gone with Linux
- ОС: Linux Mint 18.1
Re: Можно ли научиться программированию самостоятельно,по книгам?
He1mut писал(а): ↑20.10.2006 11:01О! УРА!
Все-таки дело действительно в приоритете операций. Вот так все работает:
Код: Выделить всё
int i = 0; cout << ++i << endl; cout << ++i << endl; cout << ++i << endl;
Вот так выводит 1 2 3))
А должно быть
1
2
3
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
-
georgy_sh
- Сообщения: 1172
- Статус: thermonuclear...
- ОС: GNU/Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
А я суть хотел сказать. Естественно,
Код: Выделить всё
he1mut@debian:~$ ./test
1
2
3Хммм. Странно.
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
He1mut писал(а): ↑20.10.2006 10:34elide
Вы уж простите меня, но ни в одном из своих постов я не писал, что знаю С++. По-моему, всем тут известно, что в нем я полный ламер.
Более того, забаньте меня, если найдете ссылку хоть на одно сообщение, в котором я умничаю или косвенно намекаю на то, что знаю С++.
Кто говорил, что я прочитал всего Лафоре?
Лафоре я читаю, стараюсь все повнимательнее изучать. Тем паче, преподаватели рекомендуют этот учебник. Так же там описываются самые азы программирования на С++. И это мое мнение. Таким образом, почему бы мне не выразить свое ИМХО? Мне, как новичку, все понятно в нем по мере изучения. Вот я и хочу, чтобы мое мнение, как многих других выслушали, а затем приобрели только ту литературу, которая, по их мнению, действительно УЧИТ программированию.
Так что Вы далеко не правы.
а уж говорить "я сам выучил С++", а не "я сам учу С++"... ну-ну...
Вы уж извините, а вот это действительно очень обидно. Когда я такое говорил? Почему Вы так грубите?
Код: Выделить всё
int i = 0; cout << ++i << ++i << ++i << endl;
Инкремент стоит в префиксной форме, а следовательно сначала увеличивается на единицу значение переменной, а затем полученной значение выводится в стандартный поток вывода - то бишь на наш экран.
Но вот какая петрушка:
Код: Выделить всё
he1mut@debian:~$ cat code.cpp #include <iostream> using namespace std; int main() { int i = 0; cout << ++i << ++i << ++i << endl; return 0; } he1mut@debian:~$ g++ code.cpp -o test he1mut@debian:~$ ./test 333 he1mut@debian:~$
Вот Вы программист. Дык расскажите, пожалуйста, о таком поведении программы.
Может быть, тут что-то связано с тем, что операция ++ имеет высокий приоритет, и выполняется справа налево???
Потому что порядок вычисления аргуметов при вызове функции (а << это вызов функции) неопределён. И компилятор в данном случае решает, что лучше их вычислять не слева направо, а справа налево. Вот пример, который это иллюстрирует:
Код: Выделить всё
#include "stdafx.h"
#include <iostream>
class A
{
public:
A(int x) : x_(x) { }
A& inc() {
std::cerr << "A::inc(), x = " << x_ << "\n";
++x_;
return *this;
}
int getX() const { return x_; }
private:
int x_;
};
std::ostream& my_out(std::ostream &s, const A &a)
{
std::cerr << "my_out(stream, " << a.getX() << ")\n";
return s;
}
int main()
{
A i(0);
my_out(my_out(my_out(std::cout, i.inc()), i.inc()), i.inc());
return 0;
}Его вывод:
Код: Выделить всё
A::inc(), x = 0
A::inc(), x = 1
A::inc(), x = 2
my_out(stream, 3)
my_out(stream, 3)
my_out(stream, 3)В принципе нельзя сказать, что это точная иллюстрация происходящего, но смысл тот же.
-
georgy_sh
- Сообщения: 1172
- Статус: thermonuclear...
- ОС: GNU/Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
v04bvs
Спасибо огромное за разъяснения!
Буду продолжать изучать язык
Спасибо огромное за разъяснения!
Буду продолжать изучать язык
-
Hvzh
- Сообщения: 711
- Статус: Gone with Linux
- ОС: Linux Mint 18.1
Re: Можно ли научиться программированию самостоятельно,по книгам?
v04bvs писал(а): ↑20.10.2006 11:29He1mut писал(а): ↑20.10.2006 10:34
elide
Вы уж простите меня, но ни в одном из своих постов я не писал, что знаю С++. По-моему, всем тут известно, что в нем я полный ламер.
Более того, забаньте меня, если найдете ссылку хоть на одно сообщение, в котором я умничаю или косвенно намекаю на то, что знаю С++.
Кто говорил, что я прочитал всего Лафоре?
Лафоре я читаю, стараюсь все повнимательнее изучать. Тем паче, преподаватели рекомендуют этот учебник. Так же там описываются самые азы программирования на С++. И это мое мнение. Таким образом, почему бы мне не выразить свое ИМХО? Мне, как новичку, все понятно в нем по мере изучения. Вот я и хочу, чтобы мое мнение, как многих других выслушали, а затем приобрели только ту литературу, которая, по их мнению, действительно УЧИТ программированию.
Так что Вы далеко не правы.
а уж говорить "я сам выучил С++", а не "я сам учу С++"... ну-ну...
Вы уж извините, а вот это действительно очень обидно. Когда я такое говорил? Почему Вы так грубите?
Код: Выделить всё
int i = 0; cout << ++i << ++i << ++i << endl;
Инкремент стоит в префиксной форме, а следовательно сначала увеличивается на единицу значение переменной, а затем полученной значение выводится в стандартный поток вывода - то бишь на наш экран.
Но вот какая петрушка:
Код: Выделить всё
he1mut@debian:~$ cat code.cpp #include <iostream> using namespace std; int main() { int i = 0; cout << ++i << ++i << ++i << endl; return 0; } he1mut@debian:~$ g++ code.cpp -o test he1mut@debian:~$ ./test 333 he1mut@debian:~$
Вот Вы программист. Дык расскажите, пожалуйста, о таком поведении программы.
Может быть, тут что-то связано с тем, что операция ++ имеет высокий приоритет, и выполняется справа налево???
Потому что порядок вычисления аргуметов при вызове функции (а << это вызов функции) неопределён. И компилятор в данном случае решает, что лучше их вычислять не слева направо, а справа налево. Вот пример, который это иллюстрирует:
Код: Выделить всё
#include "stdafx.h" #include <iostream> class A { public: A(int x) : x_(x) { } A& inc() { std::cerr << "A::inc(), x = " << x_ << "\n"; ++x_; return *this; } int getX() const { return x_; } private: int x_; }; std::ostream& my_out(std::ostream &s, const A &a) { std::cerr << "my_out(stream, " << a.getX() << ")\n"; return s; } int main() { A i(0); my_out(my_out(my_out(std::cout, i.inc()), i.inc()), i.inc()); return 0; }
Его вывод:
Код: Выделить всё
A::inc(), x = 0 A::inc(), x = 1 A::inc(), x = 2 my_out(stream, 3) my_out(stream, 3) my_out(stream, 3)
В принципе нельзя сказать, что это точная иллюстрация происходящего, но смысл тот же.
Если в Вашем коде поменять ++x_ на x_++, вывод Вашего примера не изменяется, но если поменять в примере He1mut'а ++i на i++, то вывод будет 210. Как Вы это объясните?
HP 255 G4 A6-6310 + Linux Mint 18.1 + Windoze7 under VmWare + OS X Mavericks under VmWare
-
rolano
- Сообщения: 845
- Статус: еще один юзер FreeBSD
- ОС: какая-то
Re: Можно ли научиться программированию самостоятельно,по книгам?
Если рассматривать << как вызов функции, то как именно можно предстваить конструкцию cout << ++i << ++i << ++i << endl;? Я имею в виду разложить эту сложную конструкцию на простые, выраженные через <<.
Вроде того как
int func1 (int param)
...
int func2 (int param)
int main ()
{
int result = func1(func2(/*аргумент*/));
return 0;
}
func1(func2(/*аргумент*/)) при этом представляется (может быть представлена) как
<временная переменая> = func1(/*аргумент*/);
int result = func2(<временная переменая>);
P.S. Приведенный в предудыщем посте пример с консольным проектом в Визуал Студио 6.0 был апробирован во Фре 5.3 и скомпилен g++ 3.4.2. Вывод: 321.
Вроде того как
int func1 (int param)
...
int func2 (int param)
int main ()
{
int result = func1(func2(/*аргумент*/));
return 0;
}
func1(func2(/*аргумент*/)) при этом представляется (может быть представлена) как
<временная переменая> = func1(/*аргумент*/);
int result = func2(<временная переменая>);
P.S. Приведенный в предудыщем посте пример с консольным проектом в Визуал Студио 6.0 был апробирован во Фре 5.3 и скомпилен g++ 3.4.2. Вывод: 321.
Я знаю только то, что ничего не знаю ... потому и обречен вечно учиться.
-
oav
- Бывший модератор
- Сообщения: 296
Re: Можно ли научиться программированию самостоятельно,по книгам?
[quote name='elide' post='267175' date='Oct 20 2006, в 01:06']
He1mut, скажи мне пожалуйста, что делает вот такой вот код на С++, как его можно было бы использовать
[quote]
Если я правельно понял код, то он или бесполезный или я его не правельно понял
Ну можно так:
зы. если я понял правельно то int надо на bool сменить.
Только зачем писать такой качмар чтобы проверить что T конверсируется в А? Но тогда это не совсем правельный код
.
Вообще-то type traits делаются более общими- is_class,is_pod,is_function_pointer..etc.
Короче если привести это к более читабельному виду то:
макрос SUPERSUBCLASS говорит наследует ли тип U от T или это одинаковые типы.
использование:
(из александреску)
[quote][quote name='v04bvs' date='Oct 20 2006, в 11:29' post='267356']
Потому что порядок вычисления аргуметов при вызове функции (а << это вызов функции) неопределён. И компилятор в данном случае решает, что лучше их вычислять не слева направо, а справа налево. Вот пример, который это иллюстрирует:
Его вывод:
В принципе нельзя сказать, что это точная иллюстрация происходящего, но смысл тот же.
[quote]
ну можно точно цитатой:
[quote]Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual
expressions, and the order in which side effects take place, is unspecified.54) Between the previous
and next sequence point a scalar object shall have its stored value modified at most once by the evaluation
of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.
The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a full
expression; otherwise the behavior is undefined. [Example:
i = v[i++]; //the behavior is undefined |
i = 7, i++, i++; // i becomes 9
i = ++i + 1; // the behavior is undefined |
i = i + 1; //the value of i is incremented[quote]
(инетересное жирным)
He1mut, скажи мне пожалуйста, что делает вот такой вот код на С++, как его можно было бы использовать
Код: Выделить всё
struct A {
A(const volatile void**);
};
char f(A);
int f(...);
template <typename T> struct WTF {
static const int _ = (sizeof(f(*(T*)0))==sizeof(char));
};[quote]
Если я правельно понял код, то он или бесполезный или я его не правельно понял
Ну можно так:
Код: Выделить всё
template<typename T>
void DoSomething()
{
bool is_T_A = WTF<T>::_ == 1;
}зы. если я понял правельно то int надо на bool сменить.
Только зачем писать такой качмар чтобы проверить что T конверсируется в А? Но тогда это не совсем правельный код
Вообще-то type traits делаются более общими- is_class,is_pod,is_function_pointer..etc.
Короче если привести это к более читабельному виду то:
Код: Выделить всё
template <class T, class U>
class Conversion
{
typedef char Small;
class Big { char dummy[2]; };
static Small Test(U);
static Big Test(...);
static T MakeT();
enum { sameType = false };
public:
enum { exists = sizeof(Test(MakeT())) == sizeof(Small) };
};
template <class T>
class Conversion<T, T>
{
public:
enum { exists = 1, sameType = 1 };
};
#define SUPERSUBCLASS(T, U) \
(Conversion<const U*, const T*>::exists && \
!Conversion<const T*, const void*>::sameType)макрос SUPERSUBCLASS говорит наследует ли тип U от T или это одинаковые типы.
использование:
Код: Выделить всё
int main()
{
using namespace std;
cout
<< Conversion<double, int>::exists << ' '
<< Conversion<char, char*>::exists << ' '
<< Conversion<size_t, vector<int> >::exists << ' ';
}(из александреску)
[quote][quote name='v04bvs' date='Oct 20 2006, в 11:29' post='267356']
Потому что порядок вычисления аргуметов при вызове функции (а << это вызов функции) неопределён. И компилятор в данном случае решает, что лучше их вычислять не слева направо, а справа налево. Вот пример, который это иллюстрирует:
Код: Выделить всё
#include "stdafx.h"
#include <iostream>
class A
{
public:
A(int x) : x_(x) { }
A& inc() {
std::cerr << "A::inc(), x = " << x_ << "\n";
++x_;
return *this;
}
int getX() const { return x_; }
private:
int x_;
};
std::ostream& my_out(std::ostream &s, const A &a)
{
std::cerr << "my_out(stream, " << a.getX() << ")\n";
return s;
}
int main()
{
A i(0);
my_out(my_out(my_out(std::cout, i.inc()), i.inc()), i.inc());
return 0;
}Его вывод:
Код: Выделить всё
A::inc(), x = 0
A::inc(), x = 1
A::inc(), x = 2
my_out(stream, 3)
my_out(stream, 3)
my_out(stream, 3)В принципе нельзя сказать, что это точная иллюстрация происходящего, но смысл тот же.
[quote]
ну можно точно цитатой:
[quote]Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual
expressions, and the order in which side effects take place, is unspecified.54) Between the previous
and next sequence point a scalar object shall have its stored value modified at most once by the evaluation
of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored.
The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a full
expression; otherwise the behavior is undefined. [Example:
i = v[i++]; //the behavior is undefined |
i = 7, i++, i++; // i becomes 9
i = ++i + 1; // the behavior is undefined |
i = i + 1; //the value of i is incremented[quote]
(инетересное жирным)
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Можно ли научиться программированию самостоятельно,по книгам?
oav
код не реален, это да. но догадаться, что он делает - вполне можно. bool там можно и не использовать, т.к. он вполне себе приводится к int.
во втором примере дело не в точках следования. с ними там как раз все нормально: и вызов функции, и возврат из нее - точки следования. а вот порядок вычисления аргументов - не задан. в этом и подвох.
He1mut
про 'я сам выучил С++' это к Clear_Mind. просто твой ответ смотрелся рядом с его очень гармонично.
Clear_Mind: я выучил...
oav: а я все никак не могу....
He1mut: тогда прочтите прекрасную книгу!
расклад-то был именно такой....
ALL
ребята, заканчивайте с оверквотингом!!!
10 человек ответило по три строчки, а страницу скролить устаешь....
код не реален, это да. но догадаться, что он делает - вполне можно. bool там можно и не использовать, т.к. он вполне себе приводится к int.
во втором примере дело не в точках следования. с ними там как раз все нормально: и вызов функции, и возврат из нее - точки следования. а вот порядок вычисления аргументов - не задан. в этом и подвох.
He1mut
про 'я сам выучил С++' это к Clear_Mind. просто твой ответ смотрелся рядом с его очень гармонично.
Clear_Mind: я выучил...
oav: а я все никак не могу....
He1mut: тогда прочтите прекрасную книгу!
расклад-то был именно такой....
а вот тут как раз про точки следования. ++x_ или x_++ выполняются внутри функции, а значит к моменту возврата из функции побочные эффекты закрепляются. поэтом разницы никакой нет. а в примере He1mut'а постфиксные инкременты выполняются еще до первого вызова функции, а потому это вообще undefined behavior...(Hvzh @ Oct 20 2006, в 11:57) писал(а):Если в Вашем коде поменять ++x_ на x_++, вывод Вашего примера не изменяется, но если поменять в примере He1mut'а ++i на i++, то вывод будет 210. Как Вы это объясните?
ALL
ребята, заканчивайте с оверквотингом!!!
10 человек ответило по три строчки, а страницу скролить устаешь....
слава роботам!
-
georgy_sh
- Сообщения: 1172
- Статус: thermonuclear...
- ОС: GNU/Linux
Re: Можно ли научиться программированию самостоятельно,по книгам?
[offtop]
Гыыы. Аж самому смешно стало...
[offtop]
-
t.t
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: Можно ли научиться программированию самостоятельно,по книгам?
Про "пипл, который постоянно что-то хавает" мне понравилось(Dark_Savant @ Oct 17 2006, в 17:10) писал(а):или опять все упирается во время и все тот же пипл, который постоянно что-то хавает ?
Как говорила моя школьная преподавательница программирования, пока начинающий программист на Си изучает сложный цикл for, начинающий программист на бейсике только начинает учиться _обходиться без_ сишного цикла for ;-)(rolano @ Oct 18 2006, в 08:53) писал(а):Заметьте - человек спрашивал не про языки разработки (что лучше выбрать), а про "научиться программированию".
Я, к примеру, программированию изначально учился на МК-61 (в 10 лет); там не то что асм -- там фактически машкод, хотя и довольно упрощённый по сравнению с тем же 8086. И я весьма жалею о том, что позже меня стали учить бейсику и паскалю, чем заставили меня забыть свои "машкодовские" привычки и фактически почти отвадили от программирования; и о том, что книга Абеля не попалась мне года на два-три раньше, чем это случилось.Dark_Savant писал(а): ↑17.10.2006 18:22да примерно так и учились.. у нас в фтк стоял десяток 286, да книжки сабжевые валялись. ходили высматривали, кто себе по паскалю брал, кто по си, а кто и по ассемблеру. сидели, читали, попутно компиляли, пробовали. а ведь по сути ничегошеньки на тот момент о компьютерах, как таковых не знали. натыкались на незнакомый термин, рылись в другой литературе.. ничего, научились.Невозможно вот так вот сесть и научится программировать на асме, не знаю ничего о компьютерах и программировании.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж