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

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

Сторінка 4 з 10«123456910»
Модератор форуму: 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 не враховує захист від введення не чотиризначного числа, та це легко можна виправити розгалуженням.


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

Ковальчук_Олександр Дата: Пн, 12.05.2008, 22:08 | Повідомлення № 46
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Від мене:
Задача 1
Дано масив A(1..M). Скласти програму заміни: елементи першого рядка поміняти місцями з елементами першого стовпця.
Задача 2
Задано таблиця A(1..N). Побудувати таблицю B(1..N), в якій першими розміщені всі від`ємні елементи таблиці A, а потім всі додатні.

Прошу писати повні коди програм

KulAlex Дата: Вт, 13.05.2008, 09:00 | Повідомлення № 47
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
Quote (Varkan)
Дано три числа A, B, C. Знайти суму меншого і більшого з них. ...знайти найоптимальніший...

Дивлячись що розуміти під словом найоптимальніший

Code
var a,b,c,min,max:integer;
begin
readln(a,b,c);
if a<b then begin min:=a; max:=b end else begin max:=a; min:=b end;
if c<min then min:=c;
if c>max then max:=c;
writeln(min+max)
end.

Quote (Ковальчук_Олександр)
Дано масив A(1..M). Скласти програму заміни: елементи першого рядка поміняти місцями з елементами першого стовпця.

Задано таблиця A(1..N). Побудувати таблицю B(1..N), в якій першими розміщені всі від`ємні елементи таблиці A, а потім всі додатні.

Як правило вживають одновимірний масив, вектор, лінійна таблиця і описується вони як А(N) або А(1..N).
І двовимірні масиви, таблиці і опис A(NxM) або A(1..N,1..M).

Будь-ласка уточніть умови задач.

Varkan Дата: Вт, 13.05.2008, 10:26 | Повідомлення № 48
Викладач ВУЗу
Повідомлень: 425
Нагороди: 0
Рейтинг: 6
А як ви дивитесь на такий варіант?
Code

...
begin
readln(a[1],a[2],a[3])
min:=a[1]
max:=a[1]
for i:=2 to 3 do begin
if min>a[i] then min:=a[i]
if max<a[i] then max:=a[i]
writeln(min+max);
end.

Додано (13.05.2008, 09:13)
---------------------------------------------
Quote (Ковальчук_Олександр)
Від мене:
Задача 1
Дано масив A(1..M). Скласти програму заміни: елементи першого рядка поміняти місцями з елементами першого стовпця.
Задача 2
Задано таблиця A(1..N). Побудувати таблицю B(1..N), в якій першими розміщені всі від`ємні елементи таблиці A, а потім всі додатні.

Quote (KulAlex)
Як правило вживають одновимірний масив, вектор, лінійна таблиця і описується вони як А(N) або А(1..N).
І двовимірні масиви, таблиці і опис A(NxM) або A(1..N,1..M).
Будь-ласка уточніть умови задач.

Дійсно трішечки не зрозуміла умова задачі.
Хоча розвязком другої може бути просте впорядкування масиву.

Додано (13.05.2008, 09:26)
---------------------------------------------

Quote (Ковальчук_Олександр)
Задача 1
Дано масив A(1..M). Скласти програму заміни: елементи першого рядка поміняти місцями з елементами першого стовпця.

Якщо трішечки підправити і взяти масив А(М*М) то (у випаку коли масив не буде квадратним нічого не вийде):
від типу даних елемента масива мало залежить і тому явзяв цілочисельний.

Code

const m=3;

var i,j,c:integer;
a:array[1..m,1..m]of integer;

begin

for i:=1 to m do
for j:=1 to m do
readln(a[i,j]);

for i:=2 to m do begin
c:=a[1,i];
a[1,i]:=a[i,1];
a[i,1]:=c;
end;

end.
Ковальчук_Олександр Дата: Вт, 13.05.2008, 19:38 | Повідомлення № 49
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Quote (Ковальчук_Олександр)
Задача 1Дано масив A(1..M). Скласти програму заміни: елементи першого рядка поміняти місцями з елементами першого стовпця.

Quote (KulAlex)
Будь-ласка уточніть умови задач.

Брав дану задачу із посібника по програмуванню і в ньому вона так записана.
Я вчора не вчитався в умову, просто методом copy-paste скористався.
Але дійсно, очевидно, що там дано прямокутна таблиця A(1..M, 1..N), а може й як написав Varkan, квадратна таблиця.
Неймовірно, що при складанні посібників, допускаються таких логічних помилок.
Задача 2. гадаю сформована для одновимірного масиву.

Quote (Varkan)
А як ви дивитесь на такий варіант?

Це ж масив з 3-х елементів.
Можна було вашу задачу сформувати так: знайти суму найбільшого і найменшого елементів масиву, тоді на ваш варіант можна було б дивитися і то не для 3-х елементів, а для будь-якої кількості. В даному випадку йде справа про три дійсні числа, гадаю описувати їх як масив є лишнім.
ktyd Дата: Ср, 14.05.2008, 10:42 | Повідомлення № 50
Я тут недавно...
Повідомлень: 37
Нагороди: 0
Рейтинг: 1
Quote (Ковальчук_Олександр)
Це ж масив з 3-х елементів
...

А кто сказал что три числа нельзя задать как масив?
по моему эти варианты приблизительно одинаковы, тодлько вариантом с масивом можно хорошо аргументировать изучения этих типов данных
например вот как можно построить задание:
для трех чисел задачи решаются одинаково, а тепер возмем для четырех чисел и вы увидите насколько возрастает код без использования масивов.
а если взять 10 чисел? 100 чисел?

Quote (Ковальчук_Олександр)
Брав дану задачу із посібника по програмуванню і в ньому вона так записана.

а "посибнык" какого издательства и года выпуска?

Quote (Ковальчук_Олександр)
Але дійсно, очевидно, що там дано прямокутна таблиця A(1..M, 1..N), а може й як написав Varkan, квадратна таблиця.

В прямоугольной не квадратной таблице вы не сможете поменять местами строки и столбци без потери данных!!!

Quote (Ковальчук_Олександр)
Задано таблиця A(1..N). Побудувати таблицю B(1..N), в якій першими розміщені всі від`ємні елементи таблиці A, а потім всі додатні.

Порядок размещения имеет значние?
тоесть я что имею ввиду если задан масив допустим на 10 элементов
1 3 -6 9 -8 -4 10 -1 -5 7

то ответ
-8 -6 -5 -4 -1 1 3 7 9 10
будет правильным? если да то сортировка методом пузырька или камушка вполне подойдет.

если же этот масив надо показать так:
-6 -8 -4 -1 -5 1 3 9 10 7
то тут немного сложнее.

Так всетаки какой вариан ответа нужно получить?

Varkan Дата: Ср, 14.05.2008, 13:53 | Повідомлення № 51
Викладач ВУЗу
Повідомлень: 425
Нагороди: 0
Рейтинг: 6
Quote (Ковальчук_Олександр)
Задача 2
Задано таблиця A(1..N). Побудувати таблицю B(1..N), в якій першими розміщені всі від`ємні елементи таблиці A, а потім всі додатні.

Code

const n=10;
var a,b:array [1..n] of integer;
i,d,v,k:integer;

begin
fir i:=1 to n do begin
readln(a[i]);
if a[i]<0 then k:=k+1;
end;
v:=1;
d:=k+1;
for i:=1 to n do
if a[i]<0 then
begin
b[v]:=a[i]
v:=v+1;
end
else begin
b[d]:=a[i]
d:=d+1;
end;

fir i:=1 to n do writeln(b[i]);
end.



Відредаговано: Varkan - Ср, 14.05.2008, 13:57
Ковальчук_Олександр Дата: Ср, 14.05.2008, 19:20 | Повідомлення № 52
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Quote (ktyd)
а "посибнык" какого издательства и года выпуска?

Це посібник якоїсь гімназії №14, м.Львова, укладач: І.В.Гісь
Quote (ktyd)
Так всетаки какой вариан ответа нужно получить?

А ви складіть дві програми для двох варіантів, коли порядок розміщення елементів ролі не грає і коли виводяться від’ємні, а потім додатні упорядковано.
ktyd Дата: Пт, 16.05.2008, 13:44 | Повідомлення № 53
Я тут недавно...
Повідомлень: 37
Нагороди: 0
Рейтинг: 1
Quote (Ковальчук_Олександр)
А ви складіть дві програми для двох варіантів, коли порядок розміщення елементів ролі не грає і коли виводяться від’ємні, а потім додатні упорядковано.

ну для второго варианта уже есть написанная програма

Quote (Varkan)
Код

const n=10;
var a,b:array [1..n] of integer;
i,d,v,k:integer;

begin
fir i:=1 to n do begin
readln(a[i]);
if a[i]<0 then k:=k+1;
end;
v:=1;
d:=k+1;
for i:=1 to n do
if a[i]<0 then
begin
b[v]:=a[i]
v:=v+1;
end
else begin
b[d]:=a[i]
d:=d+1;
end;

fir i:=1 to n do writeln(b[i]);
end.

а для

Quote (Ковальчук_Олександр)
коли порядок розміщення елементів ролі не грає

можно применить любой метод сортировки
Quote (Varkan)
Хоча розвязком другої може бути просте впорядкування масиву.

Quote (ktyd)
сортировка методом пузырька или камушка вполне подойдет.
KulAlex Дата: Пт, 16.05.2008, 17:18 | Повідомлення № 54
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
Щодо другої задачі, то варіант Varkan є штучний, як правило штучні алгоритми є більш раціональні. Але якщо в задачі буде більше двох варіантів, тоді штучні алгоритми недоцільно використовувати, скажемо, якщо до даної задачі добавити ще "0", які в результаті будуть знаходитися між відємними і додатними числами. Пропоную свій варіант:

const n=10;
var a:array[1..n] of integer;
i,j,x:integer;
begin
for i:=1 to n do
readln(a[i]);
for i:=1 to n-1 do
for j:=1 to n-1 do
if (a[j]>=0) and (a[j+1]<=0) then
begin
x:=a[j]; a[j]:=a[j+1]; a[j+1]:=x
end;
for i:=1 to n do
writeln(a[i])
end.

Відредаговано: KulAlex - Пт, 16.05.2008, 17:22
Varkan Дата: Пт, 16.05.2008, 17:39 | Повідомлення № 55
Викладач ВУЗу
Повідомлень: 425
Нагороди: 0
Рейтинг: 6
Quote (KulAlex)
варіант Varkan є штучний,

Що ви розумієте під поняттям "штучний алгоритм"

Quote (KulAlex)
якщо в задачі буде більше двох варіантів,

Наведіть будь-ласка приклад, бо я трішки не розуиію шо значить більше 2 варіантів.

Quote (KulAlex)
якщо до даної задачі добавити ще "0", які в результаті будуть знаходитися між відємними і додатними числами.

а як на рахунок такого коду???

const n=10;
var a,b:array [1..n] of integer;
i,d,v,o,k,ko:integer;

begin
for i:=1 to n do begin
readln(a[i]);
if a[i]<0 then k:=k+1;
if a[i]=0 then ko:=ko+1;
end;

v:=1;
o:=k+1;
d:=ko+k+1;

for i:=1 to n do
if a[i]<0 then
begin
b[v]:=a[i]
v:=v+1;
end
else
if a[i]=0 then
begin
b[o]:=a[i]
o:=o+1;
end else
begin
b[d]:=a[i]
d:=d+1;
end;

for i:=1 to n do writeln(b[i]);
end.

KulAlex Дата: Сб, 17.05.2008, 10:16 | Повідомлення № 56
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
Два варіанти для даної задачі це додотні і відємні числа, якщо додати 0 то вийде три, є задачі де таких варіантів багато.

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

Для двох варіантів Ваш розвязок виглядав симпатично, а для трьох вже не те.

Додано (17.05.2008, 09:16)
---------------------------------------------
Є ще одна досить цікава задача, яку можна віднести до шкільного курсу.

Дано послідовність цілих чисел, всі числа повторюється парну кількість раз крім одного. Знайти дане число.

Відредаговано: KulAlex - Сб, 17.05.2008, 10:16
ktyd Дата: Сб, 17.05.2008, 10:35 | Повідомлення № 57
Я тут недавно...
Повідомлень: 37
Нагороди: 0
Рейтинг: 1
Quote (KulAlex)
Дано послідовність цілих чисел, всі числа повторюється парну кількість раз крім одного. Знайти дане число.

тоесть надо найти число которое повторяется только 1 или 3 или 5или 7 или ... раз?

KulAlex Дата: Сб, 17.05.2008, 11:05 | Повідомлення № 58
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
Так

Додано (17.05.2008, 10:05)
---------------------------------------------
Наприклад: 3 2 4 4 3 5 2 4 3 5 4
Відповідь: 3

Varkan Дата: Сб, 17.05.2008, 11:35 | Повідомлення № 59
Викладач ВУЗу
Повідомлень: 425
Нагороди: 0
Рейтинг: 6
Quote (KulAlex)
Дано послідовність цілих чисел, всі числа повторюється парну кількість раз крім одного. Знайти дане число.

обмеження на програму якесь є?
я можу використовувати наприклад множини?

KulAlex Дата: Пн, 19.05.2008, 12:39 | Повідомлення № 60
Знаток програмування
Повідомлень: 326
Нагороди: 6
Рейтинг: 19
Давайте поставимо обмеження: числа від -32000 до 32000, і їх кількість не перевищує 1000000000

Додано (19.05.2008, 11:39)
---------------------------------------------
Коли ми вивчаємо логічні операції, то вивчаємо or, and i not дуже рідко вивчаємо xor. А про те що ці операції працюють ще і з цілими числами навіть не згадуємо (крім тих хто в школі вивчає С++ або С#). А розвязок виглядає дуже просто.

var a,b:integer;
i,k:longint;
begin
readln(k);
readln(a);
for i:=2 to k do
begin
readln(b);
a:=a xor b
end;
writeln(a)
end.

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


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