понедельник, апреля 16

Научим компьютер вежливости

Выводить текст на экран компьютера мы научились, но нужно еще как-то программе получать информацию от пользователя. Один из вариантов это воспользоваться стандартным потоком ввода cin.

Давайте напишем программу, которая спрашивает ваше имя, а потом здоровается.

Вот примерный диалог:
What is your name?
>Dorogusik
Hello, Dorogusik.

Значком > я показал, где происходил ввод пользователя.
Выводить текст на экран мы уже научились. Это делается вот так:

cout << "My text";

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

cin >> ...;

Вот только, где же этот текст будет храниться. Нам нужен какой-то «ящичек» в котором будет храниться введенный нами текст. И такие хранилища в C++ есть, они называются «переменными». В C++ в переменную можно класть данные только определенного типа. Есть переменные в которые можно класть только текст, есть переменные в которые можно класть целые числа, а в другие переменные можно класть вещественные числа.
Вещественные числа - проще говоря, это числа с десятичной точкой, например, 0.1; 3.14159265; 0.3333; 2.718281828459045 и т.п.

Чтобы завести переменную, нужно сначала выбрать, какого она будет типа, и придумать ей название (дать переменной имя). В нашем примере в переменной будет храниться текст, для хранения текста в C++ есть тип, он называется string (строка). В этой переменной мы хотим хранить имя человека, так что с выбором имени для переменной проблем нет так и назовем переменную name. Итак чтобы завести переменную нам нужно будет добавить такую строчку.

std::string name;

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

#include <string>

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

#include <iostream>
#include <string>
int main()
{
std::string name;
std::cout << "What is your name?\n";
std::cin >> name;
std::cout << "Hello, ";
std::cout << name;
std::cout << ".\n";
return 0;
}

воскресенье, апреля 15

Поговорим об ошибках

Человек такое существо, которое не может делать все идеально, обязательно где-нибудь да и ошибется. Компьютер же наоборот, как ему скажешь, так он и будет делать с точностью до последней буквы. Понятно, что все программное обеспечение делается для человека и программисты стараются как то предупредить человеческие ошибки. Например, проверка орфографии. Я вот сейчас печатаю текст и компьютер подчеркивает красным неправильные слова. Или корзина — если ты удалил по ошибке нужный файл, то потом ты его сможешь из корзины восстановить.

Когда пишешь программу: ошибки неизбежны. Например, после инструкции забыли поставить точку с запятой (;), или в начале Escape последовательности вместо обратного слеша (\) поставили прямой слеш (/). Компилятор вас не поймет и выдаст сообщение об ошибки, мне бы хотелось чтобы вы сразу же нашли общий язык с компилятором. К сожалению, компилятор выдает сообщения на английском языке. Я постараюсь дать перевод наиболее распространенных сообщений.

Сообщение: error C2143: syntax error : missing ’x’ before ’yyy’
Перевод: ошибка C2143: синтаксическая ошибка : пропущен ’x’ до ’yyy’
Пояснение: нужно посмотреть назад от указанной строчки и найди, где же вы пропустили ’x’. Такая ошибка может возникнуть, если вы забыли поставить закрывающую скобку, или точку с запятой, или кавычку или еще чего-нибудь. Так же может быть, что вы перепутали открывающий символ, например, вместо фигурной скобки ’{’ поставили круглую ’(’.

Сообщение: error C2065: ’xxx’ : undeclared identifier
Перевод: ошибка C2065: ’xxx’ : необъявленный идентификатор
Пояснение: это значит, что компилятор не знает такого слова, скорее всего вы набрали его с ошибкой.

Сообщение: error C2664: ’xxx’ : cannot convert parameter n from ’yyy’ to ’zzz’
Перевод: ошибка C2664: ’xxx’ : не могу преобразовать n-ый параметр из ’yyy’ в ’zzz’
Пояснение: скорее всего вы что-то не то написали внутри круглых скобок.

Сообщение: error C2039: ’xxx’ : is not a member of ’yyy’
Перевод: ошибка C2039: ’xxx’ : не является членом ’yyy’
Пояснение: cкорее всего вы ошиблись в написании ’xxx’.

Чтобы попасть на строчку с ошибкой, нужно нажать клавишу F8.


Помимо таких ляпов, как опечатки — забыл поставить точку с запятой, скобку и т.д. — существуют ошибки, которые компилятор отловить не может. Такие ошибки называются «логическими». Например, вы захотели посчитать сколько будет 2+2, но перепутали цифры и написали 2+3, в итоге вы получили неверный результат. Компилятор не может знать, что вы хотели посчитать, он посчитает, что вы его попросили посчитать. Современные компиляторы достаточно умны, чтобы отлавливать некоторые логические ошибки. Он их оформляет как предупреждение (warning). Советую обращать внимание на такие предупреждения, я думаю, в 99% такое предупреждение будет ошибкой.

Попробуйте, как-нибудь покорежить текст программы «Hello, world!» и посмотреть, как будет реагировать на такие изменения компилятор.

суббота, апреля 14

Разбор программы «Hello, world!»

Рассмотрим более пристально программу «Hello, world!» из предыдущего поста.
#include <iostream>
int main()
{
std::cout << "Hello, world!\n";
std::cin.get();
return 0;
}

Первая строчка
#include <iostream>
говорит компилятору, что мы будем использовать стандартный ввод и вывод. «include» переводится с английского как «включение». Директива «#include» — команда компилятору подключить (включить) библиотеку, в нашем случае это библиотека «iostream». «iostream» это сокращение от «input output stream» (поток ввода и вывода). Треугольные скобки означают, что мы будем использовать стандартную библиотеку.

Следущая строчка
int main()
объявляет функцию main. О функциях я буду говорить позже. Функция main самая главная функция в программе C++. С английского она так и переводиться «главная». С этой функции начинается выполнение программы. То что пойдет дальше в фигурных скобках выполняется программой, после ее компиляции и запуска.

Первая строчка после открывающей фигурной скобки
std::cout << "Hello, world!\n";
— команда вывода сообщения на экран. std означает, что мы будем пользоваться стандартными объектами. std::cout это стандартный поток вывода. Две открывающие треугольные скобочки (<<) команда вывести. Тексты в C++ заключаются в двойные кавычки ("). Обратите внимание на два символа в конце текста "Hello, world!\n" обратная косая черта и n такая последовательность называется Escape последовательность (читается: эскейп последовательность). \n означает перевод строки.
Все Escape последовательности начинаются с обратной косой черты (\).

Все команды в C++ заканчиваются точкой с запятой (;).

Следующая строка, мы уже знаем, ожидает ввода клавиши Enter. По аналогии, мы понимаем что std::cin это стандартный поток ввода.

И последняя строчка в блоке с фигурными скобками
return 0;
В ней дается команда на завершение функции main и в конечном итоге команда на завершение программы, причем при завершении программы будет возвращен ноль. Это число передается тому, кто запустил программу. Говорят так: «программа возвращает число». Ноль, обычно, означает успешное завершение программы, какое-то другое число означает ошибку в программе.

среда, апреля 11

Hello, world!

Многие учебники по программированию принято начинать с программы, которая выводить на экран надпись «Hello world!» В переводе с английского «Привет мир!» Не будем отходить от традиции. Вот эта программа.
#include <iostream>
int main()
{
std::cout << "Hello, world!\n";
return 0;
}
Чтобы эта программа заработала под Visual C++, нужно будет немного повозиться.

Запустите Visual C++. В прошлом посте, я писал, что программа может состоять из нескольких файлов, в Visual C++ их принято объединять в один проект. Поэтому сначала мы создадим пустой проект, и потом в него будем добавлять файлы. Для создания пустого проекта, зайдите в меню File (Файл), затем выберите New (Новый) и Project (Проект). В диалоге New project (Новый проект) выберите Win32 в левой части окна, и Win32 Console Application (Консольное приложение Win32) в правой части окна.

Далее задайте имя проекта, например, «Hello» и при необходимости измените папку, в которой проект будет сохранен.



В появившемся диалоговом окне в Application Settings (Установки приложения), оставьте без изменений выбранный пункт Console application (Консольное приложение), и выберите пункт Empty project (Пустой проект), потом нажмите кнопку Finish.



Надо теперь в наш новый проект добавить файлы. Мы добавим только один файл. Для этого зайдите в меню Project, затем выберите Add New Item (Добавить новый элемент). Выберите тип файла C++ File (Файл C++). В поле Name (Имя) введите «Hello». И нажмите кнопку Add (Добавить).



Теперь можно печатать текст нашей программы.

Для запуска программы нажмите F5, что означает откомпилировать, слинковать и запустить. Часто процесс откомпилировать и слинковать называют одним словом build (построить, собрать).

После чего ваша первая программа должна выдать окошко с фразой «Hello, world!».

Скорее всего вы увидете только черное окно, которое сразу же закроется. Увидеть, то что программа написала на этом окне «Hello, world!», вы скорее всего не успеете. Чтобы что-то увидеть, вам придеться добавить одну строчку. Окончательный вид программы вот такой.

#include <iostream>
int main()
{
std::cout << "Hello, world!\n";
std::cin.get();
return 0;
}
Теперь программа выведет на экран фразу «Hello, world!» и будет ждать нажатия клавиши Enter.

Самый сложный этап в обучении программированию вы прошли, все остальное пустяки.

Литература: netcode, Википедия.

понедельник, апреля 9

Введение

Программы пишутся на особых языках — языках программирования. Компьютер пока еще слаб в понимании естественных языков. Вообще, он понимает только «машинный язык», набор нулей и единичек, а понимание всех остальных языков (частичное обработка естественных языков, языков программирования) обеспечивают специальные программы — транслятороры.
Под естественными языками подразумеваются языки, на которых разговаривают люди — английский, русский, французкий и т.п.

Существует два типа трансляторов интерпретаторы и компиляторы. Интерпретатор сразу же переводит введенный текст в машинный код, выполняет его и выводит результат. Например, если в Google мы введем поисковый запрос «Как начать программировать?», то компьютер тут же его обработает и выведет список страниц соответствующий запросу.

Компилятор поступает по другому, он только переводит текст в машинный код и результат сохраняет в файл (обычно это файл с расширением exe и называют такие файлы исполняемыми). Потом вы можете этот файл запустить на выполнение.

Реально дело происходит немножко сложнее. Большие программы состоят из нескольких файлов с текстом программы. Компилятор переводит каждый файл в машинный код и сохраняет их в отдельных файлах, часто эти файлы называют «объектными файлами». А затем, специальная программа «линковшик» соединяет объектные файлы в один исполняемый.


Существует огромное количество языков программирования. Ассемблер, BASIC, Pascal, Delphi, C/C++, C#, PHP, Perl, HTLM, Ruby, Python, Java, Java Script, SQL — это далеко не полный список. Каждый язык программирование используется внутри своей ниши, например, Ассемблер для системного программирования, программирования микроконтроллеров; BASIC для образовательных целей; PHP, Perl, Python для Web-приложений, SQL — для баз данных.

Я считаю, что учиться программировать нужно сразу с серьезных языков программирования, языков, на которых пишутся реальные программы. Таким языком является, например, C++. Если начинать учиться с учебных языков (BASIC, Logo, школьный алгоритмический язык), то знания о синтаксисе учебного языка в реальной работе окажутся бесполезными. Нужно начинать сразу правильно программировать.

Все свою жизнь я программировал на Паскале-подобных языках: Turbo Pascal, Delphi и думал, что Delphi самый лучший язык в мире. Но в какой-то момент он оказался для меня тесным, я стал изучать другие языки программирования Ruby, Perl, C++. С++ оказался для меня откровением. И этим я хочу с вами поделиться.

Компиляторов языка С++ достаточно много: Borland C++, gcc, Intel C++, Visual C++… Я остановился на Visual C++. Это компилятор и среда разработки от Microsoft. Версия Express Edition бесплатная, ее можно скачать с сайта Microsoft. Установка простейшая, запускаем инсталлятор и отвечаем на вопросы.

Так же можно посмотреть на сайте Microsoft видео о том как установить Visual C++ и написать простейшую программу.