Содержание
- 1 Содержание
- 2 Создаём каталог проекта
- 3 Простейшая программа
- 4 Ошибки компиляции
- 5 Задание cpp1.2
- 6 Вывод в стиле языка C
- 7 Ввод-вывод
- 8 Задание cpp1.3
- 9 Решение линейного уравнения
- 10 Числа с плавающей точкой
- 11 PS-Group
- 12 Лабиринт 1.0
- 13 Делаем крутой парсер HTML страниц и парсим пару сайтов
- 14 Пример работы С#+Json
- 15 Делаем «однорукого бандита».
- 16 Игра «Печатная машинка» на С#
- 17 Графическая «доска» на C# за 10 минут.
- 18 Создаем элемент управления для панели элементов(Toolbox) Visual Studio
- 19 Программа для просмотра изображений на C#
- 20 Делаем простой редактор txt
- 21 Работает с картами в WinForms без использования JS! или Библиотека GMAP.net
Дадим некоторые пояснения. В языке Си любая пограмма, состоит из нескольких программных едениц и каждая из них — функция. Функции в Си подобны функциям или подпрограммам в Фортране или процедурам в Паскале, Имена функций выбираются произвольно (только латинскими буквами), но одно из них main, именно с нее начинается выполнение программы. Такая главная функция обычно обращается к другим функциям, которые находятся в одном файле с головной программой или извлекают из библиотеки предварительно подготовленных функций.Функция main не имеет аргументов, поэтому список ее выглядит так: ( ) . Скобки обрамляют операоры, которые реализуют собственно алгоритм. Эти скобки аналогичны BEGIN — END в Паскале.
Строка int a,b,c; объявляет a,b,c переменными целого типа. Все используемые в программе переменные должны быть объявлены. Далее идут опрераторы присваивания к a значение 5, а к b — 7, с — значение их суммы. Значения переменных типа int лежат в диапазоне [-32768; 32767]. Функция printf выводит на экран: СУММА = 12.
Рассмотрим теперь функцию scanf предназначенную для форматного ввода данных. Функция scanf в качестве фактических параметров использует адреса переменных, а не их значения. Для этого перед соответствующим параметром ставят знак & — символ взятия адресса. Например, &XL означает "адрес перменной XL", а не значение, которое переменная имеет в данный момент.
Строка форматов функции scanf указывает, какие данные ожидаются на входе. Если функция встречает в форматной строке знак % , за которым следует символ преобразования, то она будет пропускать на входе символы до тех пор, пока не встретит какой-нибудь не пустой символ.
Предыдущяя программа страдает одним недостатком: программа вычисления суммы годится только для одного конкретного случая, когда a=5, b=7. Улучшим ее, заменив соответствующие операторы присваивания вызовом функции scanf (пример 1.2) :
/* Ввод двух чисел, вычисление суммы и печать результата*/ |
#include
<
int a,b,c;
scanf(" %d %d",&a,&b);
c=a+b;
printf("Cумма = %d
",c)
>
Форматная строка предписывает функции scanf ввести десятичное число, которое надо поместить в переменную a, затем через пробел ввести второе десятичное число, которое надо присвоить переменной b.Обратите внимание, что программа начинается со строки коминтарием : /* .. */ , транслятор пропускает любые символы между /* и */ и их можно использовать для пояснений.
В статье мы напишем пару простейших программ на C++ и посмотрим, как происходит их компиляция.
Содержание
Следуйте инструкциям. Также выполните задания, указанные в тексте.
Создаём каталог проекта
Перейдите в каталог пользователя, и создайте каталог, в котором вы будете размещать свои проекты. Его можно назвать, например, “lw1” (laboratory work 1)
В Visual Studio Code откройте этот каталог. Для этого используйте меню “File”>”Open Folder…”.
Теперь вы можете добавить новый файл в каталог прямо из Visual Studio Code. Попробуйте, это так просто!
Простейшая программа
Откройте редактор, создайте файл hello.cpp и перепишите следующий текст:
Это — минимальная программа на языке C++. Она выводит в терминал строку “Hello, world!” и завершается. Она состоит из:
- директива #include подключит библиотеку потоков ввода-вывода, в том числе станут доступны поток вывода std::cout и манипулятор std::endl.
- функция main служит точкой входа в программу в тот момент, когда операционная система запускает программу
- в функции сейчас находится ровно одна инструкция, которая передаёт строку в поток вывода cout и затем передаёт туда же манипулятор endl (сокращение от endline), чтобы добавить перенос строки и завершить операцию вывода cout
Сохраните файл — это можно сделать в меню “File” либо горячей клавишей Ctrl+S :
Затем откройте терминал. В Visual Studio Code терминал можно открыть в меню “Вид”>”Интегрированный терминал” либо сочетанием клавиш “CTRL + `”
Введите в терминале команду dir . Команда выведет список файлов, и среди этих файлов должен быть файл hello.cpp .
Введите команду g++ —version . Программа g++ — это компилятор C++ из состава GCC (GNU Compiler Collections). Передав ей флаг —version , вы заставите программу вывести свою версию и завершиться. Ожидается, что у вас будет g++ 7.0 или выше:
Введите команду g++ hello.cpp -o hello . Эта команда компилирует файл hello.cpp в исполняемую программу называет исполняемый файл hello.exe на платформе Windows либо hello на Linux и MacOSX. Команда не должна выводить чего-либо, она должна просто успешно завершиться.
Теперь вы можете запустить исполняемую программу hello.exe , набрав в терминале команду hello .
Задание cpp1.1
Убедитесь, что у вас есть файл hello.cpp , в котором записана работоспособная программа “Hello, World”. Доработайте программу, чтобы вместо “Hello, World” она выводила “Hello, Name”, где Name — ваше имя в английской транскрипции.
Ошибки компиляции
Теперь попробуем составить неправильную программу. Например, уберём символ ; в конце единственной инструкции:
Запустите компиляцию снова. Вы увидите ошибку компиляции, примерно такую:
Компилятор достаточно умён, чтобы показать вам точное место ошибки и способ её исправления! Именно поэтому сообщения от компиляторов C/C++ следует внимательно читать.
Теперь попробуем внедрить другую ошибку: точку с запятой вернём на место, а в названии cout перепутаем две буквы: “cuot”
Запустите компилятор и прочитайте сообщение. Оно должно быть таким:
Компилятор снова показал себя с лучшей стороны: он догадался, что программист опечатался, и предложил свой вариант замены. К сожалению, вариант не самый удачный: компилятор предложил clog вместо cout . Тем не менее, во многих случаях компилятор угадывает правильно.
Задание cpp1.2
- Попробуйте самостоятельно найти такую опечатку в слове cout, чтобы компилятор правильно предложил способ исправления опечатки.
- Этот вариант программы сохраните в файле hello_err.cpp , чтобы затем показать преподавателю.
Вывод в стиле языка C
Вывод в cout, которым мы воспользовались, относится к языку C++. Есть и другой способ: C++ позволяет использовать возможности языка C, в том числе функции ввода-вывода в стиле языка C.
Мы воспользуемся функцией std::puts. Для доступа к ней надо подключить . Теперь программа будет выглядеть так:
Выполните в терминале команду del hello.exe для удаления старого исполняемого файла, затем g++ hello.cpp -o hello для компиляции и запустите программу hello.exe . Вы должны получить тот же результат, что и раньше:
Ввод-вывод
Теперь напишем программу, которая читает два числа из стандартного ввода и пишет их обратно в стандартный вывод. Эта программа будет использовать функции языка C: std::scanf и std::printf .
Создайте файл ab.cpp и напечатайте в нём следующий код:
Скомпилируйте код командой g++ ab.cpp -o ab . Запустите, и введите
- два целых числа: 12 88
- одно целое число и одно число с плавающей точкой: 12 88.7
- одно целое число и одну букву f: 12 f
- только букву f: f
- ничего не вводить, сразу нажать “Ctrl+Z” на Windows или “Ctrl+D” на остальных платформах, что означает “конец ввода”
Если что-то пошло неправильно, вы можете нажать в терминале Ctrl+C для завершения программы.
Мы прокомментировали код, чтобы вы поняли, что происходит. В языке C++ однострочные комментарии начинаются с символов // . Комментарии помогают понять текст программы, и поэтому хороший комментарий поясняет намерение там, где оно не очевидно из кода. Плохие комментарии поясняют очевидные вещи: писать такое — бесполезный труд. В то же время хороший комментарий может уберечь программиста от неосторожных и неправильных действий.
Теперь доработаем программу
Задание cpp1.3
Создайте файл abc.cpp и напишите программу, которая читает три числа и складывает их, а результат выводит в терминал.
Решение линейного уравнения
Рассмотрим линейное уравнение ax + b = 0 — оно также называется уравнением прямой. Мы напишем программу, способную решать такие уравнения. Но прежде чем приступить к кодированию, мы составим план действий с помощью комментариев:
Первый шаг мы реализуем с помощью puts. Второй — с помощью scanf и объявления переменных a, b. Третий шаг — с помощью printf. Создайте файл linear_equation.cpp .
Перепечатайте в него следующий код:
Скомпилируйте программу и запустите её. Попробуйте ввести две пары коэффициентов:
Везде ли программа решила задачу правильно?
Числа с плавающей точкой
Конечно же, решить уравнение в целых числах получится не всегда. Но в C++ есть поддержка чисел с плавающей точкой:
- тип данных называется float
- ему соответствует формат %f для scanf и printf
Перепишите программу следующим образом:
Попробуйте снова ввести две пары коэффициентов:
Как вы думаете, что получилось в последних двух случаях? Почему такое происходит?
Задание cpp1.4
Создайте файл square_equation.cpp и напишите программу, которая читает три коэффициента уравнения ax^2+bx+c=0 и вычисляет корни уравнения.
- Программа должна использовать числа с плавающей точкой.
- Вам пригодится функция std::sqrt, помогающая извлечь квадратный корень; в документации к ней сказано, какой заголовочный файл требуется подключить через #include .
PS-Group
- PS-Group
- sshambir@gmail.com
Материалы для курсов в Институте Программных Систем и в Волгатехе
Здесь, со временем, будет много примеров программ на языке программирования C#…
Лабиринт 1.0
Всем привет, сегодня немного поиграем, я такой лабиринт делал когда то для жены, только он был побольше, я спрятал от нее подарок, а место его нахождения записал на финише. Весь прикол в том, что как только курсор касается стенки лабиринта его перекидывает в начальную точку. В общем, погнали! Вот проект для тех кому лень читать: […]
Делаем крутой парсер HTML страниц и парсим пару сайтов
Всем привет, На просторах интернета я обнаружил один интересный парсер, я добавил описание и немного доработав решил презентовать вам. Проект объемный поэтому запаситесь терпением. Лень читать статью вот готовый проект: Поехали, 1) Создаем проект WinForm, назовем его «SuperParser». 2) Сразу заходим в свойства формы и меняем св-ву Text значение на «SuperParser», size выставляем width 800 […]
Пример работы С#+Json
Всем привет, не давно меня попросили настроить интеграцию с внешним сервисом, я приступил к работе и после подумал, возможно кому то может пригодиться такой функционал, т.к. по большей части все взаимодействия между системами не находящимися в одном домене или просто закрытые по соглашению с вендером, они частенько так делают, в договоре это обычно прописано. Но […]
Делаем «однорукого бандита».
Всем привет, сегодня мы будем делать игровой автомат. Суть, у нас будет форма с 3 барабанами, каждый барабан будет содержать только цифры от 0 до 9. Игроку при старте игры будет даваться стартовые $100, он может делать ставки 5-10-15 и т.д до $50, после нажатия рычага, у игрока 5 попыток, выигрыш зависит от количества совпадений […]
Игра «Печатная машинка» на С#
Всем привет, сегодня мы напишем игрушку, суть следующая: В форме будут появляться случайные буквы. Если игрок вводит буквы правильно, они исчезают — уровень растет и буквы появляются все чаще. Если вся форма заполнена буквами игра окончена. Кому лень читать(ниже), могут сразу скачать проект Итак, начнем… 20+
Графическая «доска» на C# за 10 минут.
Всем привет, сегодня мы сделаем простую графическую программу. Кому лень читать (ниже) могут скачайте готовый проект Поехали. 1) Создаем WinForms проект, обзываем его «WinFormsApp_Paint» 2) Меняем для формы значение св-ва Text = «MyPaint» 3) Кидаем на форму 3 элемента Label, 1 элемент NumericUpDown, 1 кнопку. 4) Для label1 св-во Text = «Выбрать цвет». Расположить в […]
Создаем элемент управления для панели элементов(Toolbox) Visual Studio
Всем привет, Сегодня мы будем делать элемент управления(Control) для масштабирования изображений, мне на текущий момент известно 2 способа, один из них мы сегодня используем. Кому лень читать (ниже) могут скачайте готовый проект Поехали. 1) Создаем проект WinForm, называем его WinFormsApp_UserControls 2) Теперь добавляем элемент UserControl. 3) У нас открывается UserControl1.cs[Конструктор], переходим в свойства этого объекта, […]
Программа для просмотра изображений на C#
Всем привет, Сегодня сделаем софтину для просмотра картинок и гифок, программка будет короткой, но рабочей). Кому лень читать(ниже), могут сразу скачать готовый проект Поехали, 1) Cоздаем проект WinForms, даем название проекту WinFormsApp_ViewPicture 2) Свойству Text присваиваем значение «View Picture». 3) Кидаем на форму элемент PictureBox растягиваем его по краям, но оставляем снизу место для кнопки. […]
Делаем простой редактор txt
Всем привет, Сегодня мы будем делать редактор текстовых файлов, который будет уметь открывать уже существующие файлы и создать новые txt-файлы. Кому читать дальше лень, могут скачать готовый проект Поехали! 1)Создаем WinForms проект называем его, например, WinFormsApp_SimpleTextEditor 2) Кидаем на форму textBox и 2 кнопки, св-во name 1 кнопки = buttonOpen, 2-ой кнопки name = buttonSave. […]
Работает с картами в WinForms без использования JS! или Библиотека GMAP.net
Всем привет, Не давно был на одном из совещаний и там, один бизнес-аналитик показал, так называемую «тепловую» карту, на карту Москвы он вывел все торговые точки наших клиентов, в итоге можно было визуально оценить какие зоны у нас сильно загружены, средне и слабо. Однако, сделал он это с использованием JS+браузер. НО у меня с JS […]