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

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

Сторінка 5 з 10«1234567910»
Модератор форуму: Bandalak, Ktara, НІКОЛЯ, volevikt 
Форум інформатиків » РОЗДІЛ VIІІ: ОБМІН ДОСВІДОМ (УРОКИ, ФАКУЛЬТАТИВИ, ПОЗАКЛАСНА РОБОТА) » 8.6 Факультатив з програмування » Задачі шкільного рівня. (Методично правильні розв’язки цікавих задач шкільної прогр.)
Задачі шкільного рівня.
Ковальчук_Олександр Дата: Вт, 11.03.2008, 03: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 не враховує захист від введення не чотиризначного числа, та це легко можна виправити розгалуженням.


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

dpi Дата: Пн, 19.05.2008, 13:46 | Повідомлення № 61
Досвідчений вчитель
Повідомлень: 1438
Нагороди: 1
Рейтинг: 39
#include<iostream>
using namespace std;
int main()
{
int N,n = 0,m = 0;
cout << "Vvedite N: ";
cin >> N;
if (N > 0)
{
n = 3; m = 5;
}
while (N > 1)
{
n = n + 6; m = m * 2;
N --;
}
cout << n + m;
}

Додано (19.05.2008, 12:46)
---------------------------------------------
Анрей, пиши, если не так.

KulAlex Дата: Пн, 19.05.2008, 18:26 | Повідомлення № 62
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
Quote (dpi)
Анрей, пиши, если не так.

Якщо це до мене то я не Андрій, Ви помилились, я Олександр.
Цей розвязок задачі, це до якої задачі??!
Varkan Дата: Чт, 22.05.2008, 15:04 | Повідомлення № 63
Викладач ВУЗу
Повідомлень: 425
Нагороди: 0
Рейтинг: 6
Три прямые на плоскости заданы уравнениями akx+bky=ck, k=1,2,3. Если эти прямые попарно пересекаются и образуют треугольник, тогда найти его площадь.
KulAlex Дата: Пт, 23.05.2008, 15:03 | Повідомлення № 64
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
var p,s,a,b,c,a1,a2,a3,b1,b2,b3,c1,c2,c3,x1,x2,x3,y1,y2,y3:real;

Function MK(a11,a12,b1,a21,a22,b2:real; var x,y:real):boolean;
var d,d1,d2:real;
begin
MK:=true;
d:=a11*a22-a12*a21;
writeln(d);
if d<>0 then
begin
d1:=b1*a22-b2*a12;
d2:=a11*b2-a21*b1;
x:=d1/d;
y:=d2/d
end else MK:=false
end;

Function D(x1,y1,x2,y2:real):real;
begin
d:=sqrt(sqr(x2-x1)+sqr(y2-y1))
end;

begin
readln(a1,b1,c1);
readln(a2,b2,c2);
readln(a3,b3,c3);
if (MK(a1,b1,c1,a2,b2,c2,x1,y1)) and
(MK(a3,b3,c3,a2,b2,c2,x2,y2)) and
(MK(a1,b1,c1,a3,b3,c3,x3,y3)) then
begin
a:=d(x1,y1,x2,y2);
b:=d(x2,y2,x3,y3);
c:=d(x3,y3,x1,y1);
p:=(a+b+c)/2;
s:=sqrt(p*(p-a)*(p-b)*(p-c));
writeln(s)
end else writeln('no')
end.

Відредаговано: KulAlex - Пт, 23.05.2008, 15:04
dpi Дата: Нд, 08.06.2008, 15:42 | Повідомлення № 65
Досвідчений вчитель
Повідомлень: 1438
Нагороди: 1
Рейтинг: 39
Quote (KulAlex)
Цей розвязок задачі, це до якої задачі??!

Это старая задача про дракона и Васелису.
Quote (KulAlex)
Function MK(a11,a12,b1,a21,a22,b2:real; var x,y:real):boolean;

Плохо знаю Паскаль, если не трудно, объясните идею и основные формулы
d:=sqrt(sqr(x2-x1)+sqr(y2-y1))
s:=sqrt(p*(p-a)*(p-b)*(p-c));
zverok Дата: Нд, 08.06.2008, 21:19 | Повідомлення № 66
Креативний вчитель
Повідомлень: 153
Нагороди: 0
Рейтинг: 8
Quote (dpi)
Плохо знаю Паскаль, если не трудно, объясните идею и основные формулыd:=sqrt(sqr(x2-x1)+sqr(y2-y1))s:=sqrt(p*(p-a)*(p-b)*(p-c));

sqrt(x) - это квадратный корень из x
sqr(x) - x в квадрате.

Остальное - математика. например, sqrt( (x2-x1)^2+(y2-y1)^2 ) - это расстояние между точками (x1, y1) и (x2, y2) -- теорема Пифагора.

KulAlex Дата: Пн, 09.06.2008, 08:30 | Повідомлення № 67
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
Суть цієї задачі, розвязати систему рівнянь. Я застосував метод Крамера, тому що, цей метод можна реалізувати і для прямих, які паралельні осям координат.
Після того, як я знайшов точки перетину прямих (вершини трикутника), потрібно знайти відстань між точками (сторони трикутника). Використав формулі відстані між точками (Геометрія 8 клас), яка виводиться із теореми Піфагора.
Quote (dpi)
d:=sqrt(sqr(x2-x1)+sqr(y2-y1))

Оскільки є сторони можна знайти і полощу. Формула Герона (Геометрія10 клас)
Quote (dpi)
s:=sqrt(p*(p-a)*(p-b)*(p-c))


Відредаговано: KulAlex - Пн, 09.06.2008, 08:32
dpi Дата: Чт, 30.10.2008, 14:58 | Повідомлення № 68
Досвідчений вчитель
Повідомлень: 1438
Нагороди: 1
Рейтинг: 39
Quote (KulAlex)
Оскільки є сторони можна знайти і полощу. Формула Герона (Геометрія10 клас)
Цитата (dpi )
s:=sqrt(p*(p-a)*(p-b)*(p-c))

Щиро дякую.

Додано (30.10.2008, 13:58)
---------------------------------------------
Господа, олимпиада на носу, а ветка молчит.

Newbie Дата: Чт, 30.10.2008, 15:28 | Повідомлення № 69
Хелпер
Повідомлень: 1412
Нагороди: 9
Рейтинг: 91
цього року, до речі, щось нетрадиційно рано районна олімпіада з інформатики -16 листопада. зазвичай тижні на 2 пізніше
vitert Дата: Сб, 01.11.2008, 20:05 | Повідомлення № 70
Тут живе...
Повідомлень: 174
Нагороди: 1
Рейтинг: 22
Quote (Ковальчук_Олександр)
Задача 3 . Знайти всі дільники натурального числа N.

Мабуть про цю задачу всі вже дано забули, але я тільки зайшов на цю вітку, тому пропоную свій варіант який думаю найбільш оптимальний оскільки цикл виконується лише до sqrt(n), корінь тут дійсно причому а не N/2

program dilnik;
uses crt;
var n,k,s,i:integer;
begin
clrscr;
write('n=');readln(n);
s:=trunc(sqrt(n));
k:=1;
for i:=2 to s do
if n mod i=0 then inc(k);
if s=sqrt(n) then k:=2*k-1 else k:=2*k;
writeln ('k=',k);
end.

dpi Дата: Пн, 03.11.2008, 08:58 | Повідомлення № 71
Досвідчений вчитель
Повідомлень: 1438
Нагороди: 1
Рейтинг: 39
в условии требуют делители, а не их количество
vitert Дата: Пн, 03.11.2008, 18:08 | Повідомлення № 72
Тут живе...
Повідомлень: 174
Нагороди: 1
Рейтинг: 22
Quote (dpi)
в условии требуют делители, а не их количество

Так, я протупив, просто глянув на ті коди що тут писались , а там якраз шукали кількість. Але це в принципі суті не міняє:

program dilnik;
uses crt;
var n,s,m,d,i:integer;
begin
clrscr;
write('n=');readln(n);
write('dil ',n,':');
s:=trunc(sqrt(n));
for i:=1 to s do begin
m:=n mod i; d:=n div i;
if m=0 then if i<>d then write(i,', ',d,', ') else write(i);
end;
end.

Щоправда, якщо дільники потрібно вивести впорядковано, то цей варіант може і не бути оптимальним.

Ще одне запитання, як можна в паскалі, і чи можна це, написати функцію x в степені y, якщо x<0. Зрозуміло не використовуючи цикл.

filnick Дата: Пн, 03.11.2008, 22:55 | Повідомлення № 73
Мудрий вчитель
Повідомлень: 2238
Нагороди: 7
Рейтинг: 124
Quote (vitert)
Ще одне запитання, як можна в паскалі, і чи можна це, написати функцію x в степені y, якщо x<0.

З точки зору математики степенева функція х в степені у при додатніх значеннях у визначена тільки для множини додатніх чисел. Тому при х<0 та y>0 в загальному випадку не визначена. Якщо ж розглядати значення у як ціле число, то при парних у: (-x)^y=x^y, при непарних у: (-x)^y=-x^y
KulAlex Дата: Пн, 03.11.2008, 23:34 | Повідомлення № 74
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
Quote (vitert)
Ще одне запитання, як можна в паскалі, і чи можна це, написати функцію x в степені y, якщо x<0. Зрозуміло не використовуючи цикл.

Дуже гарне питання!!!!
1. В багатьох мовах програмування є стандартна функція піднесення до степення Pow, Power.
2. В мові паскаль треба писати алгоритм, найоптимальніше використовуючи exp() i ln(), тільки аналізцючи аргумент функції ln().

Function Pow(x,y:real):real;
begin
if x>0 then Pow:=exp(y*ln(x)) else
if x<0 then Pow:=-exp(y*ln(-x)) else
Pow:=0
end;

Відредаговано: KulAlex - Пн, 03.11.2008, 23:35
filnick Дата: Вт, 04.11.2008, 00:03 | Повідомлення № 75
Мудрий вчитель
Повідомлень: 2238
Нагороди: 7
Рейтинг: 124
Quote (KulAlex)
Function Pow(x,y:real):real;
begin if x>0 then Pow:=exp(y*ln(x)) else
if x<0 then Pow:=-exp(y*ln(-x)) else
Pow:=0 end;

За цією функцією нуль в нульовому степені дорівнює нулю!
а (-4)^0.5=-2 !?


Відредаговано: filnick - Вт, 04.11.2008, 00:16
Форум інформатиків » РОЗДІЛ VIІІ: ОБМІН ДОСВІДОМ (УРОКИ, ФАКУЛЬТАТИВИ, ПОЗАКЛАСНА РОБОТА) » 8.6 Факультатив з програмування » Задачі шкільного рівня. (Методично правильні розв’язки цікавих задач шкільної прогр.)
Сторінка 5 з 10«1234567910»
Пошук:


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