Отправляет email-рассылки с помощью сервиса Sendsay

Инвестирование с нуля

  Все выпуски  

Программирование на Си и С++ с нуля 130) Типы данных


Школа программирования

130) Программирование на С++: Типы данных

По поводу отчетов. Главное в отчете - не ответ, а ваш исходный код :)
То есть присылая отчет, обязательно включайте в него текст на C++!

Правильные ответы:
1) -26811
2) 214.54
3) 212786.49

Ввести текст формул корректно получилось не у всех, компилятор выдавал ошибку. В таком случае вставляйте в письмо с отчетом текст кода, который не компилируется, а также точно запишите ошибку среды - сообщение о ней на английском выдается.

Чаще всего ошибки связаны с несоответствием открывающих и закрывающих скобок - примеры были именно на это :) Повнимательнее пишем формулы!

*

Не у всех получилось получить исполнимое приложение .exe - компиляция проходит успешно, а на этапе сборки программы выскакивает сообщение
[Linker Fatal Error] Fatal: Expected a file name

Кто-нибудь преодолел эту проблему?

Судя по всему, отсутствует какая-то из стандартных библиотек (не находится), которая подключается на последнем этапе сборки EXE-программы, после компиляции. По идее надо задавать для C++Builder каталоги, где хранятся стандартные библиотеки - а они обычно расположены в подкаталогах BIN и LIB каталога установки. Эти установки обычно прописываются инсталлятором по умолчанию.
Основное место для настройки каталогов - это окно проекта, вызываемое командой Project - Options. В нем есть раздел Directories, где задаются каталоги для текущего проекта. У одного из подписчиков работали (компилировались) примеры, но не работало приложение, созданное с нуля. В такой ситуации имеет смысл запомнить настройки проекта из примера, который работает.
Настройки каталогов также задаются командой Tools - Environment Options - и по-моему Library. Попробуйте там указать путь к подкаталогам BIN и LIB.

*

Немало просьб делать выпуски почаще, но это сложновато. Одни ответы на письма занимают много времени (при том, что ответить к сожалению удается далеко не всем - мне это очень грустно, но увы...). Темп занятие в неделю уже выработан из практики прошлого года, но если выйдет делать почаще, конечно буду почаще.

*

Много было вопросов по поводу того, что в версии Билдера нету пункта "VCL Form Application", а есть просто "Application". Это нормально :) В предыдущих версиях Билдера все приложения считались по умолчанию VCL, поэтому специально это не выделялось.

*

Не все увидели вложенные картинки в выпуске рассылки. С этим действительно есть проблемы - давать ли к картинкам прямые ссылки?

*

Что НЕ надо мне присылать: любые файлы проекта - .cpp и тем более .exe :) Также просьба не слать скриншоты в незапакованном формате .bmp размером несколько мегабайтов.

Также не надо присылать все, что НЕ отвечает тематике текущего занятия. Увы, но у меня нет возможности обсуждать ваши даже самые прекрасные идеи и програмы :)

Просто выделите кусочек кода на С++, который решает задачу, и вставьте его в свое письмо.

*

Есть те, кто самостоятельно занимался по курсу Дельфи, или у кого почта на мэйл ру, и спрашивают, как им быть. Что делать последним, могу подсказать - зарегистрировать нормальный бесплатный ящик - например на яндексе.ру или gmail.com.
Первым же, а также тем, кому я не могу быстро ответить, - обращайтесь к уже упомянутым в рассылке людям.

Кроме того, свои услуги и помощь предлагает Максим:
Все ученики могут писать мне на почту whitetigr2006 @ rambler.ru. Или в форум на prog-begin.net.ru тема: "Рассылка->Программирование на С++ с нуля".

Сайт prog-begin.net.ru настоятельно всем рекомендую, у кого что-то не получается! Его поддерживают замечательные, добрые и отзывчивые люди!

*

У меня также установлена среда разработки Microsoft Visual Studio 6.0, в которой имеется Microsoft Visual C++ 6.0. Ранее я с этой средой не работал. Я хотел повторить задание и в этой среде, но не смог, так как не нашел, как в ней открыть форму. Был бы Вам очень признателен, если бы Вы помогли мне решить этот вопрос.
Заранее благодарю, и огромное спасибо за рассылку!
Андрей

Microsoft Visual Studio 6.0 не поддерживает визуальную разработку на C++ - только на Бейсике. Вроде поддержка режима визуальной разработки появилась в последней версии Студии - 2005, но по-моему только для .NET.


Типы данных

Один из подписчиков, Александр, проверил результаты расчетов программы в MathCad и на калькуляторе, и у него получился немного другой результат - 216.276. Кроме того, последний ответ у некоторых вывелся в формате наподобие 2.1279Е5.

В последнем случае число записано в так называемом экспоненциальном формате - основная часть 2.1279, к которой добавляется мантисса - E5. Мантисса означает, что предыдущее число надо умножить на 10 в степени, следующей за буквой E (или e). То есть E5 означает "умноженное на 10 в пятой степени" или "умноженное на 100000".

2.1279*100000 = 212790 , что отдаленно похоже на 212786.49 :)

После буквы E можно поставить знак, тогда если он отрицательный, 10 возводится в отрицательную степень. То есть:
1e+2 = 100
1e-1 = 0,1
1e-2 = 0,01
1e1 = 10
1e0 = 1 :)

Различия в расчетах связаны с тем, что данные в С++ всегда имеют ТИП. Одни данные относятся к целым типам, другие к дробным типам, третьи - к строкам (текстовым типам). При этом целые типы, например, тоже могут различаться диапазонами допустимых значений. Эти ограничения связаны с возможностями процессора, который способен быстро работать лишь с данными ограниченных величин.

Тип данных - это модель, шаблон, по которому строятся конкретные значения.

Целые числа (числа целого типа) могут быть только целыми, а дробные - только дробными. Даже если дробное число записано как 1.0, оно все равно хранится в компьютере приближенно - вполне возможно, что оно будет равно 0.99999 или 1.0000002. Кроме того, все операции над дробными числами выполняются всегда приближенно.

Однако конечно это не значит, что сложив 100.0 и 200.0, мы получим 301.2 или 298.4. Результат будет равен 300.00005, или 299.999998, но ошибка возникнет в 4-5-7 знаке после запятой, не ранее. Другое дело, что ошибка может накапливаться, и чем длиннее формула, тем больше результат будет отличаться от истинного.

Почему же тогда в одном из ответов получился такой большой разброс - 214.54 и 216.276?

Потому что компилятор С++ самостоятельно разделяет значения на разные типы. Если записано 3838 / 354 , компилятор считает, что оба числа целые, и выполняет так называемое целочисленное деление, которое в результате тоже дает целый результат. На калькуляторе 3838 / 354 будет равно 10,8418... , а вот результат целочисленного деления даст целое 10 (дробный остаток просто отбрасывается, даже не округляясь). Таким образом и возникают сильные погрешности.

Чтобы их избежать, надо записывать числа в дробном виде - 3838.0 / 354.0 . Тогда каждое из них распознается как дробное, и результат будет весьма точным. Достаточно указать только один из операндов дробным - тогда и весь результат тоже будет дробным: 3838 / 354.0.

Типы данных в С++ обозначаются специальными идентификаторами, названиями - так называемыми ключевыми словами. Ключевые слова используются для записи понятий и команд С++. Неключевые слова программист создает и придумывает сам. Неключевые слова не должны совпадать с ключевыми словами, которые также называются зарезервированными (исключительно для нужд компилятора С++).

Стандартный целый тип обозначается в С++ ключевым словом int . Значения целого типа не могут иметь десятичной точки.

Дробные типы обозначаются ключевыми словами float и double (разница только в диапазонах охватываемых значений).

Существует также символьный тип char , который формально нужен для представления отдельных символов текста. На самом деле char также считается типом целых данных и хранит числовое значение (код) символа. Символы заключаются в одинарные кавычки: 'Ы' , 'Y' .

Текстовые последовательности (строки) представлены в Билдере в виде специализированного типа AnsiString. Строки заключаются в двойные кавычки: "Это строка!".

Задание.
1. Окончательно завершите все проблемы с установкой Билдера и компиляцией пустого проекта :)
2. Перепишите вторую формулу так, чтобы все операции выполнялись над дробными числами, и результат был правильным.

Следующее занятие будет очень важным! В нем изучается ключевое понятие программирования - переменная величина.


(c) 2004-2006 Сергей Бобровский bobrovsky as russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное