Нд, 22.04.2018, 19:11
Форум інформатиків України
Головна Реєстрація Вхід
Вітаю Вас, Гість · RSS
Вітання на форумі
Незнайомець
Вітаємо на форумі,
Незнайомцю!

 
зареєструйтесь
Перед реєстрацією обов’язково прочитайте:
Оновлення Учасники Пошук
Особисті повідомлення
Видавництво ’’Аспект’’ Видавництво

  • Сторінка 2 з 2
  • «
  • 1
  • 2
Модератор форуму: Bandalak, Ktara, НІКОЛЯ, volevikt  
Форум інформатиків » РОЗДІЛ VIІІ: ОБМІН ДОСВІДОМ (УРОКИ, ФАКУЛЬТАТИВИ, ПОЗАКЛАСНА РОБОТА) » 8.6 Факультатив з програмування » Мова С++ (поради, запитання....) (Все що стосується програмування на С++)
Мова С++ (поради, запитання....)
Пилипчук_О_П Дата: Нд, 13.08.2017, 01:17 | Повідомлення № 16
Ветеран спілкування
Повідомлень: 4102
Нагороди: 38
Рейтинг: 357
Цитата Bandalak ()
На олімпіадах директиви та зовнішні модулі заборонені.

Справді, щоразу потрібно уважно читати технічні умови конкретної олімпіади. Був час, коли з Турбо Паскаля вилучали довідкову систему (ніби учень, який без довідкової системи не може написати програму, буде претендувати на призові місця) :)
Приклад правил олімпіади, де технічні обмеження сформульовані не дуже жорстко: http://zoi2016.at.ua/index/pravila/0-6

На "багатомовних" олімпіадах складно сформулювати обмеження так, щоб нікого не "образити".
Пилипчук_О_П Дата: Вт, 17.04.2018, 22:57 | Повідомлення № 17
Ветеран спілкування
Повідомлень: 4102
Нагороди: 38
Рейтинг: 357
Хто може чітко пояснити таку проблему:
Код
#include<iostream>
using namespace std;
int main()
{
    double a;
    cin>>a;
    cout<<int(a*10)%10;
    return 0;
}

Вводимо 4.6
Отримуємо 5.
Чому? Я хотів 6...

P.S. Здогадуюсь, що причина в двійковому поданні десяткових чисел, але як це наочно побачити?


Відредаговано: Пилипчук_О_П - Вт, 17.04.2018, 22:59
Пилипчук_О_П Дата: Вт, 17.04.2018, 23:33 | Повідомлення № 18
Ветеран спілкування
Повідомлень: 4102
Нагороди: 38
Рейтинг: 357
Цитата Пилипчук_О_П ()
Вводимо 4.6
Отримуємо 5.
Чому? Я хотів 6...

Зробив невеличке дослідження.
У двійковому поданні 4.6 - це 100.100(1100), тобто періодичний дріб. Зрозуміло, що зберігаються не всі цифри дробової частини, тому насправді змінна містить менше, ніж 4.6. Класична ситуація...
В Паскалі захищеніше: функція int повертає значення не цілого, а дійсного типу, яке для знаходження остачі потрібно примусово округлити (round). Тому виводиться правильний результат: 6.
fox11 Дата: Ср, 18.04.2018, 06:10 | Повідомлення № 19
Прописаний назавжди
Повідомлень: 258
Нагороди: 2
Рейтинг: 40
#include<iostream>
using namespace std;
int main()
{
    double a;
    cin>>a;
    a=a*10;
    cout<<(int)a%10;
}

return 0; уже не обязательно.
Apice Дата: Ср, 18.04.2018, 08:11 | Повідомлення № 20
Тут живе...
Повідомлень: 185
Нагороди: 4
Рейтинг: 44
Цитата fox11 ()
return 0; уже не обязательно.
Було б "не обязательно", якби void main()
Так, компілятор "проковтне" і Ваш код, але ж дисципліна...
Пилипчук_О_П Дата: Ср, 18.04.2018, 08:25 | Повідомлення № 21
Ветеран спілкування
Повідомлень: 4102
Нагороди: 38
Рейтинг: 357
Цитата fox11 ()
return 0; уже не обязательно.

return 0; - майже обов'язково. Програма має повернути код помилки в систему. Код 0 - ознака успішного завершення. Існують й інші коди, які свідчать про різні нештатні ситуації. Краще привчати учнів до гарного стилю.
Bandalak Дата: Ср, 18.04.2018, 11:15 | Повідомлення № 22
Лідер форуму
Повідомлень: 5762
Нагороди: 42
Рейтинг: 265
Код
#include<iostream>
using namespace std;
int main()
{
    double a;
    cin>>a;
    cout<<int(a*10)%10;
    return 0;
}


Код
#include<iostream>
using namespace std;
int main()
{
    double a;
    cin>>a;
    a=a*10;
    cout<<(int)a%10;
}

return 0;


Щось я не побачив суттєвої різниці між цими кодами. В одному виходить 6, а в іншому 5?
fox11 Дата: Ср, 18.04.2018, 17:24 | Повідомлення № 23
Прописаний назавжди
Повідомлень: 258
Нагороди: 2
Рейтинг: 40
Цитата Пилипчук_О_П ()
return 0; - майже обов'язково. Програма має повернути код помилки в систему. Код 0 - ознака успішного завершення. Існують й інші коди, які свідчать про різні нештатні ситуації. Краще привчати учнів до гарного стилю.
Согласен, но я имел ввиду, что современные компиляторы С++ автоматически добавляют return 0; в конец главной функции main().
Проверял на e-olimp работает.


Відредаговано: fox11 - Ср, 18.04.2018, 17:27
Форум інформатиків » РОЗДІЛ VIІІ: ОБМІН ДОСВІДОМ (УРОКИ, ФАКУЛЬТАТИВИ, ПОЗАКЛАСНА РОБОТА) » 8.6 Факультатив з програмування » Мова С++ (поради, запитання....) (Все що стосується програмування на С++)
  • Сторінка 2 з 2
  • «
  • 1
  • 2
Пошук:


© Форум інформатиків України, 2007-2018.