Gorod.dp.ua » Міські форуми / Городские форумы
Всього знайдено 11, показано з 1 по 11.

Тема: Програмування для чайників: задачки, питання, відповіді, пояснення

  1. #1
    Аватар для _Jane_
    Реєстрація
    16 червень 2004
    Звідки Ви
    Дніпро - Tallinn
    Дописів
    15 068

    Типово Програмування для чайників: задачки, питання, відповіді, пояснення

    Нудно мені готова тут підтримувати початківців поясненням, порадою, посиланням, задачкою. До того ж мені не завадить додаткова статистика, з якими проблемами частіше стикаються початківці у програмуванні. Можемо разом розібрати якусь задану в іншому місці задачку, яка не виходить.

    Важливо: в цій темі хочеться не стьобу і не срачу, а конструктиву. Із срачіками в інше місце.

    Мої області компетенції: загальне програмування, алгоритми, C# та .NET, C++, базовий Java Script, ООП, загальні якісь речі з баз даних. Якщо маєте задачку на Java, Паскаль, щось інше, але вона більше стосується загального програмування, ніж специфіки мови - теж можна розглянути.

    Люблю задавати задачки, а потім обговорювати запропонований код і підказувати, як його можна вдосконалити.

    Ось наприклад така задачка (загальне програмування. рівень знань - цикли, арифметичні операції).

    Бігун почав тренування. В перший день він пробіг 5 км. Кожен наступний день він пробігатиме на 10% більше.
    На який день він почне пробігати більше 7 км на день?
    На який день сумарна кількість кілометрів перевищить 30?
    Востаннє редагував _Jane_: 23.04.2017 о 18:58 Причина: Пояснення

  2. #2
    Аватар для _Jane_
    Реєстрація
    16 червень 2004
    Звідки Ви
    Дніпро - Tallinn
    Дописів
    15 068

    Типово

    Наприклад, студенти методом проб можуть написати приблизно такий код
    C#
    Код:
    int i = 1;
    double k = 5.0;
    double s = k;
    do
    {
        if (k > 7)
        {
            Console.WriteLine($"Пробіг більше 7 км на {i} день.");
        }
        if (s > 30)
        {
            Console.WriteLine($"Пробіг загалом більше 30 км на {i} день.");
        }
        k += (k/100)*10;
        s += k;
        i++;
    }
    while(s < 30);
    Який працюватиме і буде виводити правильний результат для даної задачі.
    Та чи правильно зроблено цей код? Які в нього недоліки?
    Давайте спробуємо його вдосконалити.

  3. #3
    Аватар для _Jane_
    Реєстрація
    16 червень 2004
    Звідки Ви
    Дніпро - Tallinn
    Дописів
    15 068

    Типово

    Чомусь вважається, що обов'язково треба собі ставити ламаний софт. Але для навчання зараз можливості досить широкі. Наприклад, Visual Studio можна собі цілком легально встановити:

    https://www.visualstudio.com/vs/community/
    Visual Studio Community 2017
    A fully-featured, extensible, free IDE for creating modern applications for Android, iOS, Windows, as well as web applications and cloud services.

    Індивідуальні розробники можуть легально використовувати Visual Studio Community для будь-якої розробки: навчання, створення безкоштовних чи комерційних продуктів.
    Організація може легально використовувати Visual Studio Community для навчання в класі (аудиторії), для наукових досліджень, для участі в open-source проектах.

  4. #4

    Реєстрація
    13 вересень 2004
    Звідки Ви
    Днепр
    Дописів
    716

    Типово

    Цитата Допис від _Jane_ Переглянути допис
    Наприклад, студенти методом проб можуть написати приблизно такий код
    C#
    Код:
    int i = 1;
    double k = 5.0;
    double s = k;
    do
    {
        if (k > 7)
        {
            Console.WriteLine($"Пробіг більше 7 км на {i} день.");
        }
        if (s > 30)
        {
            Console.WriteLine($"Пробіг загалом більше 30 км на {i} день.");
        }
        k += (k/100)*10;
        s += k;
        i++;
    }
    while(s < 30);
    Який працюватиме і буде виводити правильний результат для даної задачі.
    Та чи правильно зроблено цей код? Які в нього недоліки?
    Давайте спробуємо його вдосконалити.
    Он не выводит правильный результат судя по постановке задачи...
    robocity.dp.ua - Мой сайт робототехники (для детей и не только)

  5. #5

    Типово

    Цитата Допис від _Jane_ Переглянути допис
    Наприклад, студенти методом проб можуть написати приблизно такий код
    C#
    Код:
    int i = 1;
    double k = 5.0;
    double s = k;
    do
    {
        if (k > 7)
        {
            Console.WriteLine($"Пробіг більше 7 км на {i} день.");
        }
        if (s > 30)
        {
            Console.WriteLine($"Пробіг загалом більше 30 км на {i} день.");
        }
        k += (k/100)*10;
        s += k;
        i++;
    }
    while(s < 30);
    Який працюватиме і буде виводити правильний результат для даної задачі.
    Та чи правильно зроблено цей код? Які в нього недоліки?
    Давайте спробуємо його вдосконалити.
    Он вообще не решает поставленную задачу......
    Все для Вас и Ваших компьютеров! Качественно, не быстро, дорого.

  6. #6
    Аватар для _Jane_
    Реєстрація
    16 червень 2004
    Звідки Ви
    Дніпро - Tallinn
    Дописів
    15 068

    Типово

    Раз ми початківці, то й почнемо спочатку. Є твердження, що цей код не працює навіть за даних конкретних умов. Давайте перевіримо.

    Встановимо собі Visual Studio Community (в мене встановлена версія 2015 року, то й скріншоти будуть відповідні).

    Після запуску має бути приблизно такий вигляд. Відкривається просто сторінка без проекту. Така сторінка нам не потрібна і її можна закривати (там, де червона позначка).
    Щоб збільшити малюнок, клацніть по ньому
Назва:  Start_01.jpg
Переглядів: 18
Розмір:  44,2 КБ
ID:	2098432

    Натомість створимо собі нормальний простий учбовий проект.
    Щоб збільшити малюнок, клацніть по ньому
Назва:  Start_02.jpg
Переглядів: 15
Розмір:  30,7 КБ
ID:	2098433

    Вибирати маємо для початку лише такий тип програми: Console Application.
    Внизу зазначається (і можна змінити)
    Name: назва програми
    Location: де на диску буде розташований вихідний код вашої програми (файли з кодом на мові програмування C#).
    Solution name: це такий агрегатор, який може містити в собі вихідний код декількох проектів (тобто декількох програм та/або бібліотек), та наразі міститиме лише нашу одну програму і називатиметься так само, як і програма (якщо ви не зміните це ім'я прямо зараз).
    Натискаємо ОК.
    Щоб збільшити малюнок, клацніть по ньому
Назва:  Start_03.jpg
Переглядів: 23
Розмір:  53,3 КБ
ID:	2098434

    Ось автоматично згенерувався вихідний код нашої першої програми і відкрився у декількох внутрішніх вікнах.
    Вікно Solution Explorer: там знаходиться агрегатор наших проектів, що називається Solution 'ConsoleApplication3'.
    Агрегатор містить аж один проект, що також називається ConsoleApplication3.
    Проект містить декілька налаштувань, які нас зараз не цікавлять (Properties, References, App.config), та основний вихідний код програми в файлі Program.cs.
    Цей код відразу ж відкрився ліворуч у вікні. Якщо раптом у лівому вікні нічого немає, треба виконати подвійний клік на назві Program.cs під проектом, і код програми відкриється.
    Якщо ж і Solution Explorer кудись зник, його дуже просто знайти знову: View -> Solution Explorer, або Ctrl + Alt + L
    Щоб збільшити малюнок, клацніть по ньому
Назва:  Start_04.jpg
Переглядів: 20
Розмір:  47,6 КБ
ID:	2098435

    Весь код, який буде виконуватись, ми зараз маємо розміщувати всередині фігурних дужок під назвою Main.
    Ось я скопіювала туди нашу програму.
    На початку додала
    Код:
    Console.OutputEncoding = System.Text.Encoding.Unicode;
    для того, щоб правильно друкувались усі літери українського алфавіту.
    В кінці додала
    Код:
                Console.WriteLine("Натисніть будь-яку клавішу...");
                Console.ReadKey(true);
    для того, щоб програма відразу не закривалась і ми могли побачити результат її виконання.
    Щоб збільшити малюнок, клацніть по ньому
Назва:  Start_05.jpg
Переглядів: 17
Розмір:  61,3 КБ
ID:	2098436

    Тепер нарешті можна натиснути кнопку Start або клавішу F5, щоб запустити програму і подивитись результат її виконання.
    Востаннє редагував _Jane_: 24.04.2017 о 21:46

  7. #7
    Аватар для _Jane_
    Реєстрація
    16 червень 2004
    Звідки Ви
    Дніпро - Tallinn
    Дописів
    15 068

    Типово

    Запускаємо програму і бачимо результат, а точніше, його цілковиту відсутність. Тут видно, що наша консольна програма (Console Application) запускається в окремому чорному вікні. Поки це вікно відкрите, програма ще виконується. Вона очікує натиснення клавіші на клавіатурі.
    Щоб збільшити малюнок, клацніть по ньому
Назва:  Start_06.jpg
Переглядів: 10
Розмір:  47,0 КБ
ID:	2098448

    Натискаємо клавішу і програма закривається, повертаємось до Visual Studio.
    Трохи проаналізувавши код програми, можна побачити, що програма не має змоги взагалі нічого вивести, бо цикл припиняється раніше. Тому блоки 1 і 2 на наступному скріншоті я вже поміняла місцями.
    Щоб збільшити малюнок, клацніть по ньому
Назва:  Start_07.jpg
Переглядів: 12
Розмір:  55,4 КБ
ID:	2098449

    Знову запускаємо (Start або F5). Тепер вже є якийсь результат. Ура.
    Щоб збільшити малюнок, клацніть по ньому
Назва:  Start_08.jpg
Переглядів: 11
Розмір:  15,8 КБ
ID:	2098450

    Натискаємо клавішу і знову повертаємось до програмного коду. Для того, щоб було краще видно хід виконання програми, можна виводити вирахувані дані на кожній ітерації циклу, з допомогою додаткового коду
    Код:
    Console.WriteLine($"i {i} k {k} s {s}");
    Щоб збільшити малюнок, клацніть по ньому
Назва:  Start_09.jpg
Переглядів: 11
Розмір:  55,9 КБ
ID:	2098451

    Тепер ось так. Ніби працює.
    Щоб збільшити малюнок, клацніть по ньому
Назва:  Start_10.jpg
Переглядів: 15
Розмір:  18,6 КБ
ID:	2098452

  8. #8
    Аватар для _Jane_
    Реєстрація
    16 червень 2004
    Звідки Ви
    Дніпро - Tallinn
    Дописів
    15 068

    Типово

    Оновлений код
    Код:
                Console.OutputEncoding = System.Text.Encoding.Unicode;
    
                int i = 1;
                double k = 5.0;
                double s = k;
                do
                {
                    k += (k / 100) * 10;
                    s += k;
                    i++;
    
                    Console.WriteLine($"i {i} k {k} s {s}");
    
                    if (k > 7)
                    {
                        Console.WriteLine($"Пробіг більше 7 км на {i} день.");
                    }
                    if (s > 30)
                    {
                        Console.WriteLine($"Пробіг загалом більше 30 км на {i} день.");
                    }
                }
                while (s < 30);
    
                Console.WriteLine("Натисніть будь-яку клавішу...");
                Console.ReadKey(true);
    Цитата Допис від _Jane_ Переглянути допис
    Та чи правильно зроблено цей код? Які в нього недоліки?
    Давайте спробуємо його вдосконалити.
    Востаннє редагував _Jane_: 24.04.2017 о 21:48

  9. #9

    Типово

    код должен не решать задачу а описывать некую математическую модель.

    Console.WriteLine($"Пробіг більше 7 км на {i} день."); будет печататься не один раз а несколько..... пока k>7, а s<30

    а если описывать мат.модель, то Console.WriteLine($"Пробіг більше 7 км на {i} день."); может вообще не напечататься ..... к не достигнет 7, а s превысит 30.
    Все для Вас и Ваших компьютеров! Качественно, не быстро, дорого.

  10. #10
    Аватар для _Jane_
    Реєстрація
    16 червень 2004
    Звідки Ви
    Дніпро - Tallinn
    Дописів
    15 068

    Типово

    Цитата Допис від oleg2011 Переглянути допис

    Console.WriteLine($"Пробіг більше 7 км на {i} день."); будет печататься не один раз а несколько..... пока k>7, а s<30
    А як таке може статися?

    Цитата Допис від oleg2011 Переглянути допис
    а если описывать мат.модель, то Console.WriteLine($"Пробіг більше 7 км на {i} день."); может вообще не напечататься ..... к не достигнет 7, а s превысит 30.
    І таке, як саме може статись? Чому і як можуть виникати такі умови?
    Востаннє редагував _Jane_: 25.04.2017 о 09:54

  11. #11

    Типово

    читайте.... в первом случае, если в цикле несколько раз k уже будет больше граничного дневного пробега, а s еще меньше граничного общего пробега.
    во втором случае, если k не достигнет граничного дневного пробега, а s уже достигнет граничный общий пробег.
    Все для Вас и Ваших компьютеров! Качественно, не быстро, дорого.

Bookmarks

Bookmarks

Ваші права у розділі

  • Ви НЕ можете створювати нові теми
  • Ви НЕ можете відповідати у темах
  • Ви НЕ можете прикріплювати вкладення
  • Ви не можете редагувати свої повідомлення
  •  
  Головна | Афіша | Новини | Куди піти | Про місто | Фото | Довідник | Оголошення
Контакти : Угода з користивачем : Політика конфіденційності : Додати інформацію
Главная страница сайта  
copyright © gorod.dp.ua.
Всі права захищені. Використання матеріалів сайту можливо тільки з дозволу власника.
Про проєкт :: Реклама на сайті