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

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

Сторінка 1 з 3123»
Модератор форуму: Ktara, Bandalak, НІКОЛЯ, volevikt 
Форум інформатиків » РОЗДІЛ ІІІ: МЕТОДИКА, ЗАСОБИ ВИКЛАДАННЯ ІНФОРМАТИКИ » 3.6 Методика викладання інформатики згідно програми » Розв’язування задач з розділу "Рядкові величини" (Тільки конкретика.)
Розв’язування задач з розділу "Рядкові величини"
Ковальчук_Олександр Дата: Нд, 29.11.2009, 22:09 | Повідомлення № 1
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
В даній темі пропоную розв’язувати задачі з розділу "Рядкові величини".
Будемо писати цікаві умови задач і хто знає, пише розв’язок.
Обов’язкове правило теми: розв’язок повинен містити текст програми на мові програмування Паскаль або іншій. Допускаються коментарі щодо розв’язку, блок-схеми, НАМ. Важливо писати програми максимум оптимально. Не можна публікувати умови наступної задачі до тих пір, поки не буде розв’язана задана автором повідомлення задача.
Прохання виконувати дане правило, інакше це прирівнюватиметься до порушень правил форуму.
Не скупіться ділитись досвідом, роблячи тим самим внесок в розвиток форуму!

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

Ковальчук_Олександр Дата: Нд, 29.11.2009, 22:15 | Повідомлення № 2
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Задача.
Ввести довільний текст. У даному тексті підрахувати кількість букв А і Б. Якщо букв А більше, ніж букв Б, то в тексті знищити всі букви Б, інакше - А

Мій варіант розв’язку. Якщо не правий, виправте.

program text;
var s:string;i,k,k1:integer;
begin
write('Введіть текст');
readln(s);
k:=0;k1:=0;
for i:=1 to length(s) do
begin
if s[i]='А' then k:=k+1;
if s[i]='Б' then k1:=k1+1;
end;
if k>k1 then
begin
for i:=1 to length(s) do
if s[i]='Б' then
delete(s,i,1);
end
else
begin
for i:=1 to length(s) do
if s[i]='А' then
delete(s,i,1);
end;
write(s)
end.

Ковальчук_Олександр Дата: Нд, 29.11.2009, 22:19 | Повідомлення № 3
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Задача 2.
В даному тексті підрахувати кількість слів. Слова в тексті відокремлені проміжками.

Варіант розв’язку, коли між словами один пропуск.

program text;
var s:string;i,k:integer;
begin
write('Введіть текст ');
readln(s);
k:=0;
for i:=1 to length(s) do
if (s[i]<>' ') and (s[i+1]=' ') then
k:=k+1;
write('Кількість слів у тексті = ',k+1);
end.

Пропоную написати програму, що передбачає довільну кількість пропусків між словами (хоч це і суперечить правилам набору тексту).

Bandalak Дата: Нд, 29.11.2009, 22:59 | Повідомлення № 4
Лідер форуму
Повідомлень: 5386
Нагороди: 37
Рейтинг: 247
Quote (Ковальчук_Олександр)
Пропоную написати програму, що передбачає довільну кількість пропусків між словами (хоч це і суперечить правилам набору тексту).

program text;
var s:string;i,k,p:integer;
begin
write('Введіть текст ');
readln(s);
k:=0; p:=0;
for i:=1 to length(s) do
begin
if (s[i]<>' ') and (p=0) then
begin
k:=k+1;
p:=1
end;
if s[i]=' ' then p:=0
end;
write('Кількість слів у тексті = ',k+1);
end.
Ковальчук_Олександр Дата: Нд, 29.11.2009, 23:15 | Повідомлення № 5
Ветеран спілкування
Повідомлень: 3621
Нагороди: 17
Рейтинг: 192
Цікавий варіант розв’язку. В кінці мабуть просто к.

Ось ще один варіант, з використанням логічної змінної:

Program text;

Var s: String; {заданий текст}
i, k : Integer; {k - кількість слів в тексті}
Flag : Boolean;
BEGIN
WriteLn('Введь текст :');
ReadLn(S);
k := 0; Flag := TRUE;
For i := 1 to Length(S) do {цикл по буквах тексту}
begin
If (s[i] <> ' ') and Flag
then k := k+1;
Flag := (s[i]=' ') {s[i]=' ' – логічний вираз выраз, що приймає значення TRUE чи FALSE}
end;
WriteLn;
WriteLn('Кількість слів в тексті: ', k);
ReadLn
END.

Bandalak Дата: Нд, 29.11.2009, 23:28 | Повідомлення № 6
Лідер форуму
Повідомлень: 5386
Нагороди: 37
Рейтинг: 247
Quote (Ковальчук_Олександр)
Цікавий варіант розв’язку. В кінці мабуть просто к.

так, просто к (я забув виправити)
volevikt Дата: Пн, 30.11.2009, 00:47 | Повідомлення № 7
Перспективна вчителька
Повідомлень: 1781
Нагороди: 24
Рейтинг: 182
Задача "Стрілки".
Задана послідовність, що складається тільки з символів ‘>’, ‘<’ і ‘ -‘. Потрібно знайти кількість стріл, які заховані в цій послідовності. Стріли – це підрядки вигляду ‘>>-->’ і ‘<--<<’.
program strilki;
var s:string; i,k:word;
begin
assign(input,'input.txt');
reset(input);
read(s);
close(input);
assign(output,'output.txt');
rewrite(output);
k:=0;
for i:=1 to length(s)-4 do
if (copy(s,i,5)='>>-->') or (copy(s,i,5)='<--<<')
then k:=k+1;
writeln(k);
close(output);
end.

Додано (29.11.2009, 23:47)
---------------------------------------------
Задача "Уравнение для 5 класса".
Уравнение для пятиклассников представляет собой строку длиной 5 символов. Второй символ строки является либо знаком '+' (плюс) либо '-' (минус), четвёртый символ — знак '=' (равно). Из первого, третьего и пятого символов ровно два являются цифрами из диапазона от 0 до 9, и один — буквой x, обозначающей неизвестное.
Требуется написать программу, которая позволит решить данное уравнение относительно x.

Помогите найти ошибку:
program uravnen;
var s:string;
begin
assign(input,'input.txt');
reset(input);
read(s);
assign(output,'output.txt');
rewrite(output);
if (s[1]='x') and (s[2]='+') then writeln(ord(s[5])-ord(s[3]));
if (s[3]='x') and (s[2]='+') then writeln(ord(s[5])-ord(s[1]));
if (s[5]='x') and (s[2]='+') then writeln(ord(s[1])+ord(s[3]));
if (s[1]='x') and (s[2]='-') then writeln(ord(s[5])+ord(s[3]));
if (s[3]='x') and (s[2]='-') then writeln(ord(s[1])-ord(s[5]));
if (s[5]='x') and (s[2]='-') then writeln(ord(s[1])-ord(s[3]));
close(output);
end.

vitert Дата: Пн, 30.11.2009, 03:43 | Повідомлення № 8
Тут живе...
Повідомлень: 174
Нагороди: 1
Рейтинг: 22
Quote (volevikt)
Задача "Уравнение для 5 класса". Уравнение для пятиклассников представляет собой строку длиной 5 символов. Второй символ строки является либо знаком '+' (плюс) либо '-' (минус), четвёртый символ — знак '=' (равно). Из первого, третьего и пятого символов ровно два являются цифрами из диапазона от 0 до 9, и один — буквой x, обозначающей неизвестное. Требуется написать программу, которая позволит решить данное уравнение относительно x. Помогите найти ошибку:

Мій варіант:
program r5;
var f1,f2:text;
a,b,c,d,x:integer;
s:string[5];
begin
assign(f1,'input.txt');
assign(f2,'output.txt');
reset(f1);
read(f1,s);
close(f1);
a:=1;
if s[2]='-' then a:=-1;
if s[1]='x' then
begin
val(s[3],b,d);
val(s[5],c,d);
x:=c-b*a;
end else
begin
if s[3]='x' then
begin
val(s[1],b,d);
val(s[5],c,d);
x:=a*(c-b);
end else
begin
val(s[1],b,d);
val(s[3],c,d);
x:=b+a*c;
end;
end;
rewrite(f2);
writeln(f2,x);
close(f2);
end.

У Вас не зрозуміло для чого файли якщо читаєте з клавіатури і виводете на екран, я так зрозумів читати треба з фала і виводити в файл. Також val замість odd.

Відредаговано: vitert - Пн, 30.11.2009, 03:49
Bandalak Дата: Пн, 30.11.2009, 04:09 | Повідомлення № 9
Лідер форуму
Повідомлень: 5386
Нагороди: 37
Рейтинг: 247
Quote (vitert)
У Вас не зрозуміло для чого файли якщо читаєте з клавіатури і виводете на екран, я так зрозумів читати треба з фала і виводити в файл.

vitert, у неї все правильно з файлами. Вам тут побачилася помилка, тому що volevikt, використала маловідомий метод перенаправлення введення замість клавіатури та виведення замість дисплея до файлів.
Саме використання зарезервованих імен файлових змінних INPUT та OUTPUT приводить до такого перенаправлення. Цей метод має лише єдиний недолік, що не можна у одній програмі користуватися одночасно консоллю та файлами. За те дуже просто все записується без зайвих описів. Попробуйте самі протестувати програму.


Відредаговано: Bandalak - Пн, 30.11.2009, 04:10
alex Дата: Пн, 30.11.2009, 09:16 | Повідомлення № 10
Активний учасник
Повідомлень: 586
Нагороди: 1
Рейтинг: 17
Quote (Ковальчук_Олександр)
Задача 2.
В даному тексті підрахувати кількість слів. Слова в тексті відокремлені проміжками.
Варіант розв’язку, коли між словами один пропуск.
program text;
var s:string;i,k:integer;
begin
write('Введіть текст ');
readln(s);
k:=0;
for i:=1 to length(s) do
if (s[i]<>' ') and (s[i+1]=' ') then
k:=k+1;
write('Кількість слів у тексті = ',k+1);
end.
Пропоную написати програму, що передбачає довільну кількість пропусків між словами (хоч це і суперечить правилам набору тексту).

Оскільки текст дещо специфічний, для повноти умови нобхідно сазати, що текст містить хоча б одне слово,
не починається і не закінчується пропуском (або конкретизувати інщі крайові умови)
В цьому випадку попередня програма буде давти правильну вдповідь, якщо
внести деякі зміни

var
s :string;
i,k :integer;
begin
write('Введіть стрічку символів ');
readln(s);
k:=0;
for i:=1 to length(s)-1 do
if (s[i]<>' ') and (s[i+1]=' ') then
k:=k+1;
write('Кількість слів у стрічці = ',k+1);
end.

Відредаговано: alex - Пн, 30.11.2009, 09:17
vitert Дата: Пн, 30.11.2009, 12:59 | Повідомлення № 11
Тут живе...
Повідомлень: 174
Нагороди: 1
Рейтинг: 22
Quote (Bandalak)
vitert, у неї все правильно з файлами. Вам тут побачилася помилка, тому що volevikt, використала маловідомий метод перенаправлення введення замість клавіатури та виведення замість дисплея до файлів. Саме використання зарезервованих імен файлових змінних INPUT та OUTPUT приводить до такого перенаправлення. Цей метод має лише єдиний недолік, що не можна у одній програмі користуватися одночасно консоллю та файлами. За те дуже просто все записується без зайвих описів. Попробуйте самі протестувати програму.

Можливо я про це не знав. Спрощення лише в тому, що не описувати фали, краще писатиму як писав.

Трохи спростив свою прогу:
program r5;
var f1,f2:text;
a,b,c,c1,c2,c3,d,x:integer;
s:string[5];
begin
assign(f1,'input.txt');
assign(f2,'output.txt');
reset(f1);
read(f1,s);
close(f1);
a:=1;
if s[2]='-' then a:=-1;
val(s[1],b,c1);
val(s[3],c,c2);
val(s[5],d,c3);
if c1<>0 then x:=d-c*a
else if c2<>0 then x:=a*(d-b) else x:=b+a*c;
rewrite(f2);
writeln(f2,x);
close(f2);
end.

volodschool2 Дата: Пн, 30.11.2009, 15:07 | Повідомлення № 12
Досвідчений учасник
Повідомлень: 1357
Нагороди: 12
Рейтинг: 263
Quote (alex)
для повноти умови нобхідно сазати, що текст містить хоча б одне слово, не починається і не закінчується пропуском (або конкретизувати інщі крайові умови)

Вважаю, що не потрібно без відома автора задачі уточнювати "інші крайові умови". Задачу треба розв’язувати "так як є", треба самому передбачувати, як буде працювати програма в цих "крайових умовах". Адже на олімпіадах програми перевіряються за допомогою спецтестів, якщо програміст щось не врахував - це його проблеми. Автор задачі в умові сказав все, що хотів сказати.
Quote (Bandalak)
INPUT та OUTPUT
- це не маловідомий метод, так працювали з текстовими файлами в ранніх версіях Pascal, зараз використовують файлові змінні. INPUT та OUTPUT залишились для сумісності із старими версіями паскаля.


Відредаговано: volodschool2 - Пн, 30.11.2009, 15:10
alex Дата: Пн, 30.11.2009, 15:33 | Повідомлення № 13
Активний учасник
Повідомлень: 586
Нагороди: 1
Рейтинг: 17
Quote (volodschool2)
Вважаю, що не потрібно без відома автора задачі уточнювати "інші крайові умови". Задачу треба розв’язувати "так як є", треба самому передбачувати, як буде працювати програма в цих "крайових умовах". Адже на олімпіадах програми перевіряються за допомогою спецтестів, якщо програміст щось не врахував - це його проблеми. Автор задачі в умові сказав все, що хотів сказати.

Дозволю собі не погодитися з вашою точкою зору. Однією з вимог до умови задачі є повнота.
Один буде розвязувати задачу вважаючи, що трічка може починатись з пропусків, а інший ні.
І відповідно до сформульваної умови кожен буде правий. Тобто умова допускає подвійне тлумачення.
Наявність спецтестів на олімпіадах не допускає можливості подвійного тлумачення умови.
У мене є досвід члена журі Всеукраїнської олімпіади з інформатики ( 16 років). Якщо умова задачі не
відповідає принципу повноти, то це недолік задачі.
vitert Дата: Пн, 30.11.2009, 17:00 | Повідомлення № 14
Тут живе...
Повідомлень: 174
Нагороди: 1
Рейтинг: 22
Quote (Ковальчук_Олександр)
Задача 2. В даному тексті підрахувати кількість слів. Слова в тексті відокремлені проміжками.

Quote (alex)
Оскільки текст дещо специфічний, для повноти умови нобхідно сазати, що текст містить хоча б одне слово, не починається і не закінчується пропуском (або конкретизувати інщі крайові умови) В цьому випадку попередня програма буде давти правильну вдповідь, якщо внести деякі зміни

Quote (alex)
Дозволю собі не погодитися з вашою точкою зору. Однією з вимог до умови задачі є повнота. Один буде розвязувати задачу вважаючи, що трічка може починатись з пропусків, а інший ні. І відповідно до сформульваної умови кожен буде правий. Тобто умова допускає подвійне тлумачення. Наявність спецтестів на олімпіадах не допускає можливості подвійного тлумачення умови. У мене є досвід члена журі Всеукраїнської олімпіади з інформатики ( 16 років). Якщо умова задачі не відповідає принципу повноти, то це недолік задачі.

Також погоджуюсь із тим що умова повна і не потребує ніяких додаткових пояснень, і її потрібно розв'язувати так як є, тобто пропуск може стояти де завгодно і їх може бути скільки завгодно, так як і те що текст може складатись їз самих пропусків тоді у відповіді нуль - все однозначно. Якщо ви пишете додаткові умови то це вже буде дещо спрощена задача.


Відредаговано: vitert - Пн, 30.11.2009, 17:01
alex Дата: Пн, 30.11.2009, 17:58 | Повідомлення № 15
Активний учасник
Повідомлень: 586
Нагороди: 1
Рейтинг: 17
Слідуючи вашій логіці то і початкова задача п. Ковальчуком розв'язана невірно так, як не передбачено , що
текст може закінчуватись пропуском.
Quote (vitert)
Якщо ви пишете додаткові умови то це вже буде дещо спрощена задача.

Задача не спрочується, тим що добавляється одна команда розгалуження, але вона
відповідатиме (повторюю) принципу повноти. З розумінням відносячись до Вашої точки зору
хотів би підкреслити, що існують вимоги до формулювання умови задачі. І їх потрібно виконувати.
Було декілька випадків коли учасники Всеукраїнської олімпіади розвязували дві різні
задачі при одній умові. І кожен з них був правий (повірте жюрі було достатньо компетентне).
Все що не заборонено те дозволено.
Форум інформатиків » РОЗДІЛ ІІІ: МЕТОДИКА, ЗАСОБИ ВИКЛАДАННЯ ІНФОРМАТИКИ » 3.6 Методика викладання інформатики згідно програми » Розв’язування задач з розділу "Рядкові величини" (Тільки конкретика.)
Сторінка 1 з 3123»
Пошук:


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