Консультации: задачи по теме "Функции"

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

Обратите внимание:

  • пишите номер задачи;
  • оформляйте ссылку так, чтобы она была ссылкой:


Примеры и указания 1  (отдельный h-файл писать не нужно)
Требования:

  1. Данные описывайте только внутри функций;
  2. Напишите не менее двух функций: одну для ввода данных, другую -описанную в тексте задачи;
  3. Печать  производится только в функции main.

54 комментария:

  1. Ответы
    1. Нужно выложить на диск только файл с расширением .cpp
      Вы можете проконтролировать, как виден файл, нажав на ссылку в другом браузере.

      Удалить
  2. Ответы
    1. 1.Ваши функции ygli() и proverkacos() делают фактически одно и то же два раза. Это признак того, что нужно сделать рациональнее: в одной функции вычислять сначала косинус угла, затем сам угол и одновременно возвращать эти два результата. Как это сделать, посмотрите в примере презентации (я его завтра размещу здесь в блоге).
      2.Делать функцию возведения в квадрат совершенно бессмысленно: pow(х,2) сама является функцией.
      3. Обратите внимание на требование, что должна быть функция для ввода данных как в большом примере http://presproglang.blogspot.com/p/blog-page_25.html

      Удалить
  3. Ответы
    1. 1.Отдельную функцию для оператора scanf тоже делать не надо. В этой функции введите сразу все 3 координаты и все 3 их сразу верните.
      2.Вы не сделали то, о чем я Вас просила в п.1 выше.
      Не спешите, изучите новый материал (сообщение в этом блоге от 24.03). Цель моих замечаний в том, чтобы Вы научились возвращать из функции несколько результатов.

      Удалить
  4. Ответы
    1. Функция float CosiniUgol():
      1.Неправильно подсчитан угол
      2.Имя функции имеет тип, должно возвращать результат (или пересылайте какой-нибудь результат и добавьте оператор для этого, или сделайте так, чтобы имя ничего не возвращало).

      Удалить
    2. Функция float VvodDannich (float *x,float *y,float *z):
      1.Имя функции имеет тип...(см.выше)
      2. Зачем указатели? Хотите попробовать?
      3. Операторы (*x); что делают?

      Удалить
    3. int main():
      1.Переменную g выведите с 6 знаками после запятой.
      2. Рассчитайте контрольный пример(придумайте ax, ay,az, рассчитайте углы) напишите его мне и прогоните Вашу программу с ним.

      Удалить
  5. Ответы
    1. Татьяна Юрьевна, мне Даша сказала, что Вы мне не зачли прошлые задачи.

      Удалить
    2. Данная задача нуждается в доработке ?

      Удалить
    3. Вы дали ссылку на задачу №13 по циклам. Я отмечу, что она сдана. А где задача №6 по функциям с исправлениями?

      Удалить
  6. Продолжаю по задаче на функции №6.
    Что значит "без указателей из данной функции main не хочет принимать данные." ведь из CosiniUgol( ) принимает. То же самое. Оператор scanf("%fl",&z) пишется как обычно, но с правильным форматом.

    ОтветитьУдалить
  7. Ответы
    1. Так программу которая "не хочет" почему не скинули?!
      Вы путаете понятия и это и есть причина, по которой не получается:
      Пишете:"void CosiniUgol (float ugn,float ug1, float ug2, float ug3,float &Cosink, float &Ugolk )// В этой функции использовал адреса. Без них также ничего не выходит."
      &Cosink-это не адрес, это -ссылка. Обратите внимание, в списке параметров стоит ссылка (&Cosink), внутри пользуетесь именем (Cosink). При вызове функции также пользуетесь именем: CosiniUgol (a2,a1,a2,a3,Cosin2,Ugol2); (т.е.Cosin2)

      Удалить
    2. Вот так и нужно сделать в void VvodDannich( )
      Только в операторе scanf все равно пишется ссылка -это особенность оператора

      Удалить
  8. Ответы
    1. Давайте для начала поправим логику, чтобы она стала попроще:
      1. всего даны 4 точки. Что значит "Введите координату y точки, лежащей на первом отрезке"?
      Указание: функция VvodDannich( ) должна вводить координаты одной точки (наиболее универсальный вариант) и возвращать их обратно. Функция main() вызывает ее 4 раза.

      2.Функция Proverka( ) получает координаты 3 точек. 2 точки -это концы отрезка, еще 1 точка -проверяемая на предмет принадлежности этому отрезку. Функция возвращает 0, если точка не принадлежит отрезку, и 1 - если принадлежит.

      3.Функция main() вызывает Proverka( ) сначала для 1 отрезка и 1й точки второго отрезка. А затем для 1 отрезка и 2й точки второго отрезка. И печатает заключение (если оба конца 2го отрезка лежат на 1м отрезке, значит, отрезки лежат на одной прямой).

      4.Если знаменатель дроби равен нулю (например, z1-z2), то нужно, чтобы z=z1. Но это оставьте на потом.

      5.Просчитайте контрольный пример и пришлите мне

      Удалить
  9. Здравствуйте, как говорили попыталась написать массивы
    ссылка

    ОтветитьУдалить
    Ответы
    1. #include
      #include

      using namespace std;


      int main()
      {
      string Fam[3]={"Smith","Jonson","Tetcher"};
      int ex1[3]= {4, 5, 3};
      int ex2[3]= {5, 5, 2};
      int ex3[3]= {4, 4, 2};
      int ex4[3]= {5, 4, 2};
      cout<< Fam[0]<<" "<<ex1[0]<<endl;
      return 0 ;
      }

      Удалить
    2. Имена библиотек
      iostream и string

      Удалить
  10. Здравстуйте, Татьяна Юрьевна, у меня почему то не читает программу не знаю почему.. Может я что-то не так делаю.
    ссылка

    ОтветитьУдалить
    Ответы
    1. Мельникова Марина 11 вариант

      Удалить
    2. 1.Что значит "не читает"? А Вы её просили? Вы оформили функцию VvodDannich( ), но её не вызываете, она и не работает. Кроме того, внимательно ознакомьтесь с учебным материалом: данные, полученные функцией, нужно возвратить в main, а Вы этого не делаете.
      И вообще, эта функция должна вводить только одну дробь. Для ввода второй дроби вызовете её ещё раз.
      2.Это что за зверские имена (да еще целые!): int A/B ,C/D. Таких имен в С/С++ не бывает. Используйте буквы и цифры, например, drob1=A/B; А вообще пока не отладите ввод, функцию raznost()уберите.
      3.После отладки этой части нужно будет написать функцию сокращения дроби.

      Удалить
  11. Татьяна Юрьевна, скажите пожалуйста задачу по классам и HTML.

    ОтветитьУдалить
  12. Задачу по классам выбирайте любую. По HTML выбирайте тему проекта , сообщите мне на странице Консультации по задачам HTML, я напишу Вам номер схемы. Вопросы пишите на страницах консультаций по задачам нужной темы.

    ОтветитьУдалить
  13. Здраствуйте, Мельникова Марина 11 вариант

    ссылка

    ОтветитьУдалить
    Ответы
    1. Татьяна Юрьевна, это правильно или нет?Вы зачтёте её?

      Удалить
  14. здравствуйте, Татьяна Юрьевна, вы говорили выложите информацию по массивам, как в талицу их вносить

    ОтветитьУдалить
  15. Здравствуйте, сделала построила таблицу с массива
    ссылка

    ОтветитьУдалить
  16. Ответы
    1. Молодец! Видно, что ваяла сама, все алгоритмы доморощенные. Но почему не сделала как я просила: ввод одной дроби в отдельной функции и вызываете ее 2 раза. Не получилось? Это (использование одной функции для разных данных) нужно обязательно освоить.
      Я даже не буду Вас заставлять использовать алгоритм Евклида для сокращения дроби, а вот функцию ввода одной дроби сделайте. Если есть вопросы, пишите.

      Удалить
    2. Я как понимаю мне функцию ввода одной дроби сделать только и все?

      Удалить
  17. Ответы
    1. Здравствуйте, Юлия! Очень хорошо, рабочая программа!
      Однако, давайте сделаем ее более грамотной. Начнем с заголовка функции
      void schet_kach (int* ex1, int* ex2, int* ex3, int* ex4, double& s)

      1. Указатели при передаче массивов не слишком хороши, можете обмануть сами себя, забыв, что имеете дело с массивом. Принято указывать явно:
      void schet_col (int ex1[],..)
      массив при этом передается по ссылке, но значка указателя или ссылки не ставят.

      2.В функцию нужно передавать число элементов массива в качестве параметра. А то Вы хитрите, явно деля на 3. А если 500 человек- будем программу переписывать?

      3.Результат у функции один, при его возвращении воспользуйтесь именем функции.

      4. Что за "кружева" из операторов if? Воспользуйтесь логическими операциями. Оставьте только один if.

      5. Думаю, очевидно, что обе Ваши функции schet_col и schet_kach делают одно и то же. Сумеете написать одну функцию, которая возвращает или качественную или количественную успеваемость?

      Удалить