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

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

Сторінка 9 з 10«1278910»
Модератор форуму: Bandalak, Ktara, НІКОЛЯ, volevikt 
Форум інформатиків » РОЗДІЛ VIІІ: ОБМІН ДОСВІДОМ (УРОКИ, ФАКУЛЬТАТИВИ, ПОЗАКЛАСНА РОБОТА) » 8.6 Факультатив з програмування » Задачі шкільного рівня. (Методично правильні розв’язки цікавих задач шкільної прогр.)
Задачі шкільного рівня.
Ковальчук_Олександр Дата: Вт, 11.03.2008, 02:09 | Повідомлення № 1
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
У гостьовій книзі користувач роман попросив розв’язати кілька простих задач для свого сина.
Я вирішив допомогти йому і заодно створити тему, де хтось буде писати умову цікавої задачі шкільного рівня, а інші будуть пропонувати розв’язки цієї задачі. І ми разом серед кількох варіантів розв’язку вибиратимемо найоптимальніший, методично правильний. Тема досить актуальна і цікава. Сподіваюсь, допоможе вчителям, які з різних причин погано знаються на задачах з програмування навіть шкільного рівня (наприклад вчитель, який інформатику читає не за спеціальністю).

Отож, задачі з гостьової книги:
Задача 1. Дано натуральне число N (1000 < =N<=9999). Визначити, чи є числo поліндромом, тобто таким числом, яке зліва направо і справа наліво читається однаково (всі чотири цифри враховуються; наприклад, 0110).
Задача 2. Василина Премудра грала в шашки зі змієм Гориничем на дуже великій дошці. Спочатку Василина з’їла у Горинича 3 шашки, а Горинич у Василини – 5 шашок, потім Василина у Горинича з’їла 9 шашок, а Горинич у Василини – 10 шашок, на третьому ході Василина проковтнула 15 шашок, а Горинич- 20. Ця серйозна гра тривала ще довго, аж поки Горинич не втомився і після N-го ходу не з’їв саму Василину. Скільки всього шашок проковтнув Змій Горинич? Кількість шашок завжди достатня.
Задача 3 . Знайти всі дільники натурального числа N.

Розв’язки:
Задача 1.
var n,n1,n2,n3,n4,r:integer;
begin
write('Введіть будь-яке чотирьохзначне число: ');
readln(n);
n1:=n div 1000;
n2:=(n div 100) mod 10;
n3:=(n div 10) mod 10;
n4:= n mod 10;
r:=n4*1000+n3*100+n2*10+n1;
if r=n then writeln ('Введене число ',n,' являється поліндромом.')
else writeln ('Введене число ',n,' не є поліндромом.')
end.
Задача 3.
var i,n:integer;
begin
writeln('Введіть натуральне число');
readln(n);
writeln('Дільники числа ',n,': ');
for i:=1 to n do
if n mod i = 0 then
write(i,' ');
end.

Розв’язок задачі 2 напишу незабаром.
А зараз хотілося б почути ваші думки з приводу того, чи оптимально розв’язані задачі 1 та задачі 3.
Звичайно, задача 1 не враховує захист від введення не чотиризначного числа, та це легко можна виправити розгалуженням.


Шановні форумчани!!!!!
Повідомлення, які не відповідають темі або несуть некорисний зміст будуть видалятись без попередження!!!

НІКОЛЯ Дата: Вт, 28.09.2010, 21:44 | Повідомлення № 121
Знавець вірусів
Повідомлень: 2877
Нагороди: 17
Рейтинг: 201
Quote (alfaven)
портабулювати функцію y=lnx+cosx, інтервал a=1,б=1,5

Пан Шевчук! alex має рацію ви помилились форумом ;)
Ковальчук_Олександр Дата: Вт, 20.09.2011, 20:02 | Повідомлення № 122
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
[admin]Теми з програмування треба реанімувати! Більшість погоджуються, що це найцікавіший розділ інформатики, а активності не проявляють.[/admin]

Задача. Нещасний Петрик їсть несмачну макаронину завдовжки n км. Першого дня він з’їв половину всієї довжини, другого дня - третину від того, що залишилося, третього дня - четверту частину від того, що залишилося другого дня і т.д. Скільки макаронини ще залишиться йому "домучувати" на m-тий день?
Спробуйте розв’язати самостійно. Якщо не вийде відкривайте спойлер.
P.S. Можливо є оптимальніший розв’язок, буду вдячний за конструктивні зауваження.



До речі, хто як вважає щодо вибору типу циклу в даній задачі?
Пилипчук_О_П Дата: Вт, 20.09.2011, 22:13 | Повідомлення № 123
Ветеран спілкування
Повідомлень: 3867
Нагороди: 30
Рейтинг: 346
Я з переляку теж почав робити в циклі. І тільки тоді, коли побачив результати випробувань готової програми, зрозумів, що задача, на жаль, математична :)

var m:integer; n:real;
begin
readln(n);
readln(m);

writeln(n/m);
end.

Хто має раціональніший варіант - прошу поділитись ;)
Ковальчук_Олександр Дата: Вт, 20.09.2011, 22:33 | Повідомлення № 124
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Да. Тільки як Ви здогадались? Має бути якесь математичне пояснення. Виходить, що ця задача належить до типу лінійних, але в збірнику лежить в розділі для циклічних...
Пилипчук_О_П Дата: Вт, 20.09.2011, 23:16 | Повідомлення № 125
Ветеран спілкування
Повідомлень: 3867
Нагороди: 30
Рейтинг: 346
Я не математик. Тому зрозумів тоді, коли побачив: результати перших запусків з вхідними даними (1,1), (1,2), (1,3), (1,4) утворили підозріло знайомий ряд чисел. Потім змоделював в Excel і пересвідчився.
swetikccc Дата: Ср, 21.09.2011, 13:38 | Повідомлення № 126
Ветеран спілкування
Повідомлень: 3953
Нагороди: 28
Рейтинг: 370
Quote (Пилипчук_О_П)
Я не математик. Тому зрозумів тоді, коли побачив: результати перших запусків з вхідними даними (1,1), (1,2), (1,3), (1,4) утворили підозріло знайомий ряд чисел. Потім змоделював в Excel і пересвідчився.

Оце і є як кажуть КЛАС
Бо ми читаемо моделювання, а забуваємо його використовувати.
Ось для чого потрібна інформатика.)))
+1

Додано (21.09.2011, 13:38)
---------------------------------------------

Quote (Ковальчук_Олександр)
Да. Тільки як Ви здогадались? Має бути якесь математичне пояснення. Виходить, що ця задача належить до типу лінійних, але в збірнику лежить в розділі для циклічних...

От Вам і цікавий приклад аналізу
dpi Дата: Ср, 21.09.2011, 14:17 | Повідомлення № 127
Досвідчений вчитель
Повідомлень: 1438
Нагороди: 1
Рейтинг: 39
Quote (swetikccc)
Ось для чого потрібна інформатика.)))
+1

Плюс 1 - это оценка или исправление ошибки:
writeln(n/(m+1)); ?


Відредаговано: dpi - Ср, 21.09.2011, 14:19
Пилипчук_О_П Дата: Ср, 21.09.2011, 16:39 | Повідомлення № 128
Ветеран спілкування
Повідомлень: 3867
Нагороди: 30
Рейтинг: 346
Помилки немає. У задачі питається:

Quote (Ковальчук_Олександр)
Скільки макаронини ще залишиться йому "домучувати" на m-тий день?


При m=1 має бути відповідь "всю макаронину". Тобто на перший день у нього попереду вся макаронина.
Тому writeln(n/m);


Відредаговано: Пилипчук_О_П - Ср, 21.09.2011, 16:39
Ковальчук_Олександр Дата: Ср, 21.09.2011, 17:18 | Повідомлення № 129
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Задачу пережували. Хоча ІМХО кожен варіант розв’язку має право на життя і пройде тест на валідність.
Задача 2. На дверях ліфта висіло загрозливе попередження про те, що двері зачиняються самі в той момент, коли зайвий за вагою пасажир переступить поріг ліфта. Котрий за рахунком пасажир постраждає, якщо ліфт витримує вагу не більше як S кг, а вага пасажирів, що стоять у черзі до ліфта, дорівнює відповідно a1, a2, ... , an?

Мій розв’язок:
swetikccc Дата: Ср, 21.09.2011, 19:14 | Повідомлення № 130
Ветеран спілкування
Повідомлень: 3953
Нагороди: 28
Рейтинг: 370
Знову чудова задача
Тільки для чого в розв'язку Ви вводили змінну n?
Bandalak Дата: Ср, 21.09.2011, 19:27 | Повідомлення № 131
Лідер форуму
Повідомлень: 5521
Нагороди: 39
Рейтинг: 260
Дійсно тут кількість пасажирів необмежена, так сказати до першого товстенького... B)
Пилипчук_О_П Дата: Ср, 21.09.2011, 19:41 | Повідомлення № 132
Ветеран спілкування
Повідомлень: 3867
Нагороди: 30
Рейтинг: 346
Задача сформульована некоректно. Питання слід виправити: "Скільки пасажирів постраждає, якщо ліфт і т.д." Останнього пасажира двері не придушать, оскільки спрацюють, коли він вже переступить поріг. А от летіти після цього будуть разом :'(

Змінна n була б не зайва у випадку, якщо допускається, що пасажирів не вистачить, щоб "завалити" ліфт (умовою задачі це не заборонено). Але в наведеному програмному коді ця змінна дійсно не використовується...
alex Дата: Ср, 21.09.2011, 19:52 | Повідомлення № 133
Активний учасник
Повідомлень: 586
Нагороди: 1
Рейтинг: 17
Quote (swetikccc)
Тільки для чого в розв'язку Ви вводили змінну n?

При формулюванні умови задачі малось на увазі, що вона призначена для
учнів, які тільки починають знайомитись з обробкою таблиць.

Можна довго дискутувати по питанню, чи потрібно в процесі обробки даних їх і вводити.

На мою думку запропонований розвязок має недолік.

1. Не враховано випадок, що ніхто не постраждає. При певному підборі значень можливе зациклення.

2. Типи не всіх величин вказано правильно

Program lift;
Var
i,n :word;
a :array [1..100] of real;
s,sp :real;

begin
readln(s);
readln(n);
for i:=1 to n do read(a[i]);

i :=0;
sp :=0;

While (sp<=s ) and (i<n) do
begin
i:=i+1;
sp:=sp+a[i];
end;

if sp>s
then writeln(i)
else writeln(0);
end.


Відредаговано: alex - Чт, 22.09.2011, 08:15
Ковальчук_Олександр Дата: Ср, 21.09.2011, 20:26 | Повідомлення № 134
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
alex, я згоден з Вами, що з використанням масиву розв’язок буде красивішим. Але дана задача знаходиться у збірнику у розділі "алгоритми з повтореннями", тобто вважається, що учні ще не знають масивів, тому я спробував розв’язати її без використання масиву.
Quote (alex)
and (i<n)

згоден з цим зауваженням.
Quote (Пилипчук_О_П)
Задача сформульована некоректно.

Також погоджуюсь з цим. Мабуть спрямую дане зауваження до автора задачі.
Мені взагалі подобається дискусія в такому форматі. Так можна не тільки розглянути задачі, але й знайти найкращі алгоритми їх розв’язку.
swetikccc Дата: Ср, 21.09.2011, 21:52 | Повідомлення № 135
Ветеран спілкування
Повідомлень: 3953
Нагороди: 28
Рейтинг: 370
Пане alex, чому Ви обмежили кількість пасажирів сотнею, в задачі не сказано про обмеження? ))))
Форум інформатиків » РОЗДІЛ VIІІ: ОБМІН ДОСВІДОМ (УРОКИ, ФАКУЛЬТАТИВИ, ПОЗАКЛАСНА РОБОТА) » 8.6 Факультатив з програмування » Задачі шкільного рівня. (Методично правильні розв’язки цікавих задач шкільної прогр.)
Сторінка 9 з 10«1278910»
Пошук:


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