 |
Вітаю Вас, Гість · RSS |
 |
Задачі шкільного рівня.
|
Ковальчук_Олександр |
Дата: Вт, 11.03.2008, 02:09 | Повідомлення № 1 |
Ветеран спілкування
Повідомлень: 3714
| У гостьовій книзі користувач роман попросив розв’язати кілька простих задач для свого сина. Я вирішив допомогти йому і заодно створити тему, де хтось буде писати умову цікавої задачі шкільного рівня, а інші будуть пропонувати розв’язки цієї задачі. І ми разом серед кількох варіантів розв’язку вибиратимемо найоптимальніший, методично правильний. Тема досить актуальна і цікава. Сподіваюсь, допоможе вчителям, які з різних причин погано знаються на задачах з програмування навіть шкільного рівня (наприклад вчитель, який інформатику читає не за спеціальністю). Отож, задачі з гостьової книги: Задача 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, 21:08 | Повідомлення № 46 |
Ветеран спілкування
Повідомлень: 3714
| Від мене: Задача 1 Дано масив A(1..M). Скласти програму заміни: елементи першого рядка поміняти місцями з елементами першого стовпця. Задача 2 Задано таблиця A(1..N). Побудувати таблицю B(1..N), в якій першими розміщені всі від`ємні елементи таблиці A, а потім всі додатні. Прошу писати повні коди програм
|
|
| |
|
KulAlex |
Дата: Вт, 13.05.2008, 08:00 | Повідомлення № 47 |
Знаток програмування
Повідомлень: 326
| 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, 09:26 | Повідомлення № 48 |
Викладач ВУЗу
Повідомлень: 425
| А як ви дивитесь на такий варіант? 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, 18:38 | Повідомлення № 49 |
Ветеран спілкування
Повідомлень: 3714
| Quote (Ковальчук_Олександр) Задача 1Дано масив A(1..M). Скласти програму заміни: елементи першого рядка поміняти місцями з елементами першого стовпця. Quote (KulAlex) Будь-ласка уточніть умови задач. Брав дану задачу із посібника по програмуванню і в ньому вона так записана. Я вчора не вчитався в умову, просто методом copy-paste скористався. Але дійсно, очевидно, що там дано прямокутна таблиця A(1..M, 1..N), а може й як написав Varkan, квадратна таблиця. Неймовірно, що при складанні посібників, допускаються таких логічних помилок. Задача 2. гадаю сформована для одновимірного масиву. Quote (Varkan) А як ви дивитесь на такий варіант? Це ж масив з 3-х елементів. Можна було вашу задачу сформувати так: знайти суму найбільшого і найменшого елементів масиву, тоді на ваш варіант можна було б дивитися і то не для 3-х елементів, а для будь-якої кількості. В даному випадку йде справа про три дійсні числа, гадаю описувати їх як масив є лишнім.
|
|
| |
|
ktyd |
Дата: Ср, 14.05.2008, 09:42 | Повідомлення № 50 |
Я тут недавно...
Повідомлень: 37
| 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, 12:53 | Повідомлення № 51 |
Викладач ВУЗу
Повідомлень: 425
| 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, 12:57 |
|
| |
|
Ковальчук_Олександр |
Дата: Ср, 14.05.2008, 18:20 | Повідомлення № 52 |
Ветеран спілкування
Повідомлень: 3714
| Quote (ktyd) а "посибнык" какого издательства и года выпуска? Це посібник якоїсь гімназії №14, м.Львова, укладач: І.В.Гісь Quote (ktyd) Так всетаки какой вариан ответа нужно получить? А ви складіть дві програми для двох варіантів, коли порядок розміщення елементів ролі не грає і коли виводяться від’ємні, а потім додатні упорядковано.
|
|
| |
|
ktyd |
Дата: Пт, 16.05.2008, 12:44 | Повідомлення № 53 |
Я тут недавно...
Повідомлень: 37
| 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, 16:18 | Повідомлення № 54 |
Знаток програмування
Повідомлень: 326
| Щодо другої задачі, то варіант 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, 16:22 |
|
| |
|
Varkan |
Дата: Пт, 16.05.2008, 16:39 | Повідомлення № 55 |
Викладач ВУЗу
Повідомлень: 425
| 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, 09:16 | Повідомлення № 56 |
Знаток програмування
Повідомлень: 326
| Два варіанти для даної задачі це додотні і відємні числа, якщо додати 0 то вийде три, є задачі де таких варіантів багато. Штучним для даної задачі є підрахунок дадатніх, відємних і 0. І потім взалежності цих даних щось буде робитись. Для двох варіантів Ваш розвязок виглядав симпатично, а для трьох вже не те. Додано (17.05.2008, 09:16) --------------------------------------------- Є ще одна досить цікава задача, яку можна віднести до шкільного курсу. Дано послідовність цілих чисел, всі числа повторюється парну кількість раз крім одного. Знайти дане число.
Відредаговано: KulAlex - Сб, 17.05.2008, 09:16 |
|
| |
|
ktyd |
Дата: Сб, 17.05.2008, 09:35 | Повідомлення № 57 |
Я тут недавно...
Повідомлень: 37
| Quote (KulAlex) Дано послідовність цілих чисел, всі числа повторюється парну кількість раз крім одного. Знайти дане число. тоесть надо найти число которое повторяется только 1 или 3 или 5или 7 или ... раз?
|
|
| |
|
KulAlex |
Дата: Сб, 17.05.2008, 10:05 | Повідомлення № 58 |
Знаток програмування
Повідомлень: 326
| Так Додано (17.05.2008, 10:05) --------------------------------------------- Наприклад: 3 2 4 4 3 5 2 4 3 5 4 Відповідь: 3
|
|
| |
|
Varkan |
Дата: Сб, 17.05.2008, 10:35 | Повідомлення № 59 |
Викладач ВУЗу
Повідомлень: 425
| Quote (KulAlex) Дано послідовність цілих чисел, всі числа повторюється парну кількість раз крім одного. Знайти дане число. обмеження на програму якесь є? я можу використовувати наприклад множини?
|
|
| |
|
KulAlex |
Дата: Пн, 19.05.2008, 11:39 | Повідомлення № 60 |
Знаток програмування
Повідомлень: 326
| Давайте поставимо обмеження: числа від -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.
|
|
| |
© Форум інформатиків України, 2007-2019.  |