Глава №1. Итоговый тест

  Юрий  | 

    | 

  Обновл. 23 Мар 2019  | 

 15887

 ǀ   31 

Эти задания рассчитаны для улучшения запоминания пройденного материала и применение его на практике.

Задание №1

Напишите однофайловую программу (с именем main.cpp), которая запрашивает у пользователя два целых числа, добавляет их, а затем выводит результат. В программе должно быть 3 функции:

   readNumber(), которая запрашивает в пользователя целое число, а затем возвращает его в main().

   writeAnswer(), которая выводит результат на экран. Функция должна быть без возвращаемого значения и иметь только один параметр.

   main(), которая соединяет всё и вся.

Подсказка №1: Для выполнения операции сложения не нужно создавать отдельную функцию (просто используйте оператор +).

Подсказка №2: Функцию readNumber() нужно вызывать дважды.

Подсказка №3: В Visual Studio первой строчкой должно быть #include "pch.h" (если вы используете предварительно скомпилированные заголовочные файлы).

Ответ №1

main.cpp:

Задание №2

Измените программу из задания №1, чтобы функции readNumber() и writeAnswer() находились в отдельном файле io.cpp. Используйте предварительные объявления для доступа к этим функциям с функции main().

Подсказка: Если у вас возникли проблемы, убедитесь, что io.cpp правильно добавлен к вашему проекту и подключен к компиляции (см. Урок №20. Многофайловые программы).

Ответ №2

io.cpp:

main.cpp:

Задание №3

Измените программу из задания №2, чтобы она использовала заголовочный файл io.h для доступа к функциям (вместо использования предварительных объявлений). Убедитесь, что ваш заголовочный файл использует header guards.

Ответ №3

io.cpp:

io.h:

main.cpp:

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (182 оценок, среднее: 4,93 из 5)
Загрузка...

Комментариев: 31

  1. Аватар Илья:

    Здравствуйте!
    Спасибо за Ваши труды!
    У меня к Вам такой вопрос (может быть я где то упустил этот момент, если так, прошу просто скинуть ссылку=) ): у Вас в программе в исполнительных файлах обращение к <iostream> то есть, то нет, в итоге не понятно, когда есть необходимость подключать данную библиотеку, а когда нет? Не понимаю от слова совсем=)
    Я создал main файл, в нем вбил #include "pch.h" и #include <iostream>, потом создал (по аналогии с вашим примером) исполнительный файл io уже без использования данных директив, в итоге получил сбой ещё на этапе компиляции. добавил #include "pch.h" и #include <iostream> — всё заработало. попробовал убрать только #include <iostream> — программа продолжила стабильно работать. т.е. проблема именно в отсутствии #include "pch.h"?
    Но, если я правильно понял статью, то когда мы создаем исполнительный файл, main остаётся своего рода главным файлом, обращаясь лишь к информации в исполнительном, соответственно зачем ему директивы в исполниловке? Он вроде как должен читать код другого файла, использую свои директивы?
    И про заголовочные файлы тоже немножко путаница в голове.
    В общем, про многофайловые программы есть множество вопросов, был бы премного благодарен за ответы. И, если честно, думаю, Ваша аудитория была бы Вам тоже очень благодарна, если бы Вы сделали отдельный урок или статью о том, как заголовочные и исполнительные файлы взаимодействуют между собой. Ну т.е. подробно: какой файл к какому обращается, как они зависят друг от друга, можно ли с помощью заголовочного файла подключить библиотеки к исполнительным, или может это можно сделать с помощью другого файла. Было бы очень интересно понять этот процесс с точки зрения железа — как оно обрабатывает эти файлы.

    Извините, если комментарий получился очень большим=)Просто очень хочется разобраться=)

    1. Аватар Константин:

      Илья, ты объявления, стоя на остановках, читал? Вот заголовочный файл (с расширением .h) это то же объявление с остановки. В нём прописано нечто тебя интересующее и доступ к нему. По прописанному ты устанавливаешь доступ и получаешь интересующее тебя. Переходишь к следующему объявлению и всё повторяешь. Некоторые объявления написаны от руки, поэтому они в "таких" кавычках, некоторые напечатаны в типографии поэтому они в <таких> кавычках. Например, вызываешь функцию girlByCall(). В объявлении указано: love girlByCall(long long double siski, char pussy); love — это тип возвращаемого значения (т. е. ты от неё получаешь любовь), long long double siski & char pussy — это её параметры, в которые ты передаёшь свои аргументы — денежные знаки. А void — это например собственные дети — ничего тебе не возвращают, но аргументы ты им передаёшь. Ещё вариант — вызов например "Скорая Медицинская помощь": help ambulance(); , которая хранится в библиотеке предварительно скомпилированных заголовков <call911> и приклеена к столбу (как и все другие заголовочные файлы) клеем #include. Ну и последний вариант: void commentaryIntoInternet(); — ты не передаёшь туда никаких денежных значений и не ждёшь оттуда никаких поступлений. Просто комментарий живёт своей жизнью и производит какое-то воздействие на читателя… Я так себе это всё представляю.

  2. Аватар Эрик:

    Спасибо за уроки, сделал с первого раза. Была проблема с директивами и препроцессором в этой главе, пришлось обращаться к сторонним видео урокам, чтобы въехать в суть. Но в основном все легко усваивается. Спс)

  3. Аватар nickatin:

    Получилось даже без ошибок. И все благодаря очень подробным урокам)

  4. Аватар Антгон:

    Хотел немного усложнить задание и добиться, чтобы в строке вывода был не просто результат сложения, а, например, так:
    Итого: 5 + 6 = 11
    При написании в main строки

    все показывает как мне нужно, но при попытке написать код для функции void writeAnswer все идет кувырком. Перепробовал кучу вариантов, но без результата.
    Пожалуйста, подскажите, как сделать правильный код для функции, чтобы при компиляции появлялся именно такой результат!

    1. Аватар Константин:

      Про побочные эффекты читал? Делай минимум действий в каждом стейт-менте — тогда и кувырки в прог-е меньше отжигать будут.

    2. Аватар Alexey:

      Скорее всего из-за того, что вы отправляете на в функцию печати всего одно значение, а хотите использовать все 3. Измените функцию так, чтобы она получала все 3 значения.

  5. Аватар GAS:

  6. Аватар Лёха:

    То чувство, когда все на изи этот тест пишут, а я ни одного задания не сделал, половину кода не понимаю. Придётся заново всё перечитывать, пока не начну понимать 🙁

  7. Аватар ufo:

    Пример хороший но не логичнее ли будет вписать #include <iostream>в io.h (а также все нужные инклюды которые могут потребоваться для других функций).
    После чего в io.cpp и в main.cpp в инклюдах надо писать только #include "io.h" (вместо дублирования инклюдов а их может быть много, тем более у нас хеадергвард прописан)
    врезультате например std::cout<<"ALL OK"; в конце main будет работать.

  8. Аватар Руслан:

    а таким способом будет правильно?

  9. Аватар Andrey:

    Решил «тупо» переписать ответы на тесты, что бы набить руку.(Итоговый тест 1). Первое задание откомпелировалось без проблем. А второе из 2-х файлов никак не компилируется. И в первом и во втором случае выдаёт ошибку 1010 и советуе добавить #include ‘’stdafx.h’’, но я точно копирую ответ. В чем прикол? Я полный ‘’чайник’’, но тема зашла, хочется дойти до сути.

  10. Аватар Рома:

    Здравствуйте, в 3 задании сделал точно также как и у вас в ответе, но мне выдает две ошибки :
    1) идентификатор readNumber() не определён
    2) идентификатор writeAnswer() не определён
    в чём может заключаться проблема?
    Проверял уже много раз код один в один с вашим .

    1. Аватар Алексей:

      Тут 2 варианта. Либо в main.cpp не прописан файл заголовка (#include "io.h"), либо в файлезоголовка не объявлены указанные функции. Подробнее здесь: Урок 21. Заголовочные файлы.

    2. Аватар Эрик:

      Подключение io.h идет до подключения <iostream>?

      1. Аватар Рома:

        Эрик, спасибо огромное, у меня в принципе #include <iostream> не был подключен в этом была вся проблема , не понимаю как я упустил это, ещё раз огромное спасибо )))

      2. Аватар Алексей:

        Файл заголовка можно подключить и до и после jostream.

  11. Аватар Tahir:

    Отличный тест. Без лишней теории и охватывает все основные аспекты Главы1. Спасибо за Ваш труд!

    1. Юрий Юрий:

      Спасибо, что читаете 🙂

  12. Аватар Даниил:

    Здравствуйте , такой вопрос )
    Во второй функции мы вводим одну переменную x
    А в функции main() мы выводим эту функцию и (x+y)….
    Уточните пожалуйста что здесь и как )

    1. Аватар Александр:

      А что там не понятного? Мы вызываем функцию writeAnswer() А "x+y" — это параметр этой функции, который равен сумме x и y, и вот это значение присваивается переменной x в функции writeAnswer() Просто нужно внимательно читать уроки. У каждой функции своя переменная с именем "X" (в каждом городе есть своя улица Ленина)

    2. Аватар Алексей:

      Все просто. Каждая из предстваленных функций "не знает", что одноименные переменные есть в других функциях.
      Подробнее тут: Урок 15. Локальная область видимости.

  13. Аватар Алекей:

    Есть недочет. После каждого урока надо штук по 10 практических заданий для закрепления материала. Все получилось с первого раза! Но практики очень не хватает.

    1. Аватар Максим:

      Согласен, это уже будет полировка, а так все хорошо.

    2. Аватар Константин:

      Да-да, полностью поддерживаю Алексея: Юрий, пожалуйста, прибавьте контрольных заданий, а то как-то мало связей между нейронами образуется у меня в голове от одного задания:-(

  14. Аватар илья:

    у меня в 1задании 39 ошибок, придется кодить сначала

  15. Аватар Игорь...:

    Прикольно, первое задание выполнил так же как и в ответе, кроме…

    Работает… Но правильно ли так?

    1. Юрий Юрий:

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

  16. Аватар Diana:

    В итоге все получилось, не без ошибок, конечно, но получилось) очень рада) спасибо за Ваш труд!)

    1. Юрий Юрий:

      Пожалуйста 🙂

  17. Аватар Дима:

    Хм….урок без коментов.
    У всех все просто получилось?!)

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *