«Осенний фестиваль знаний 2024»

Материалы к онлайн-занятию по теме: «Строковые переменные», 10 класс

Материалы к онлайн-занятию по теме: «Строковые переменные», 10 класс

Умение решать задачи – такое же практическое искусство, как умение плавать или бегать. Ему можно научиться только путем подражания или упражнения. Д. Пойа

Строковые переменные используются в задачах различных типов:

· подсчет частоты появления символа в строке;

· поиск подстроки в строке, замена найденной подстроки на другую строку;

· выделение слов из строки, нахождение числа слов в строке, нахождение минимальной (максимальной) длины слова в строке;

· сравнение и сортировка строк и др.

Все приведенные программы написаны на языке программирования PascalABC.

А теперь немного теории, и за задачи!

Олимпиады: Информатика 1 - 11 классы

Содержимое разработки

Материалы к занятию онлайн по теме:

«Строковые переменные», 10 класс


Умение решать задачи – такое же практическое искусство, как умение плавать или бегать.
Ему можно научиться только путем подражания или упражнения.
Д. Пойа



Строковые переменные используются в задачах различных типов:

  • подсчет частоты появления символа в строке;

  • поиск подстроки в строке, замена найденной подстроки на другую строку;

  • выделение слов из строки, нахождение числа слов в строке, нахождение минимальной (максимальной) длины слова в строке;

  • сравнение и сортировка строк и др.



Все приведенные программы написаны на языке программирования PascalABC.



Когда все задачи по теме будут прорешены и станут понятны, буду знать, что эта тема, строковые переменные, вами усвоена!

По всем вопросам пишите в группу или в личку.



А теперь немного теории, и за задачи!

Определение

  • Символ это буква, цифра или какой-либо знак.

  • Строка упорядоченная последовательность символов, заключенная в апострофы.

  • Количество символов в строке называется ее длиной

  • Длина строки может лежать в диапазоне от 0 до 255.

  • Каждый символ строковой величины занимает 1 байт памяти и имеет числовой код в соответствии с таблицей кодов ASCII

Таблица кодов ASCII

  • Символ может быть записан, ограниченный апострофами (‘a’) или записан в коде (#97)

  • сhr() – функция, возвращающая символ по его коду в кодовой таблице ASCII.

  • ord() – функция, возвращающая код по соответствующему символу.

Вывод таблицы кодов

Описание строк

  • Var

:string;

:string[n];

n - максимально возможная длина строки. Если параметр опущен, то по умолчанию он считается равным 255.

  • Var

name : string[15];

Элемент строки

  • К строке можно обратиться посимвольно.

  • i-й символ строки s записывается как s[i].

  • Например, если s = ‘Мир',

то s[1] = это ‘М',

s[2] = это ‘и',

s[3] = это ‘р'

Конкатенация (слияние)

  • Над строковыми данными определена операция слияния, обозначаемая знаком +.

  • Например:

a := 'Pascal'; b := 'ABC' c := a + b; В этом примере переменная c приобретет значение 'PascalABC'.

  • Аналогичную операцию выполняет функция concat(s1,s2,...,sn)

c:=concat(a,b);

результат с='PascalABC'

Сравнение строк

  • Над строками определены операции сравнения ,=,,=, результат выполнения операции логический.

  • Две строки сравниваются посимвольно, слева направо, по кодам символов. Если одна строка меньше другой по длине, при сравнении недостающие символы короткой строки заменяются символом с кодом 0.

  • В результате сравнения двух строк получается логическое значение (true или false).

Примеры:

‘строка’’строки’ (true);

‘Abc’’abc’ (true);

‘год’’век’; (true);

Длина строки

  • length(s); определяет текущую длину строки s.

Пример:

s=‘Программирование’; length(s) = 16

Копирование в строке

  • copy(s,p,k); возвращает подстроку, выделенную из строки s, длиной k символов, начиная с символа под номером p.

Пример:

s := ‘порт сервера DNS';

s1 := copy(s, 9, 4); {s2 будет ‘вера'}

Позиция символа в строке

  • pos(s1,s); возвращает номер первой позиции подстроки s1 в исходной строке s. Если подстроки нет, то выдает 0.

Пример:

s := способ хранения';

x1 := pos(‘ранения', s); {x1 будет 9}

x2 := pos(‘рана', s); {x2 будет 0}

Вставка строки в строку

  • insert(s1,s,p); вставляет строку s1 в строку s, начиная с символа под номером p строки s.

Пример:

s := 'Система Pascal';

insert('Turbo ',s,9); {s будет равно 'Система Turbo Pascal'}


Удаление в строке

  • delete(s,p,k); удаляет из строки s подстроку длиной k символов, начиная с символа под номером p.

Пример:

s := 'Система Turbo Pascal'; delete(s,8,6); {s будет равно 'Система Pascal'}

Преобразования

Str (x,s); - преобразует числовое значение x в строковое s.

Val (s,v,error); - преобразует строковое значение s в числовое v, где значение переменной error равно позиции первого по порядку неправильного символа в s, если преобразование не произошло, или 0 в случае успешного преобразования.

Молодцы! Основные понятия усвоены, теперь приступим к задачам!



Задача 1.

С помощью функции копирования и операции конкатенации составить из частей слова “информатика” слово “торт”.

program novslovo;

uses crt;

var s, ns: string;

begin

     s:='информатика';

     ns:=copy(s,8,1)+copy(s,4,2)+copy(s,8,1);

     writeln(ns);

end.















Задача 2.

Подсчитать, сколько раз среди символов заданной строки встречается буква “а”.



program kolbukv_a;

uses crt;

var s: string;

      i, k: integer;

begin

     write('Введите строку: ');

     readln(s);

     k:=0;

     for i:=1 to length(s) do

          if s[i]='а' then k:=k+1;

     writeln('Буква “а” встречается ', k, ' раз(а)');

end.

Буква “а” встречается 5 раз(а)

Задача 3.

Найти долю пробелов в строке A.



program dolya;

uses crt;

var a: string;

     i, k: integer;

     d: real;

begin

     write('Введите строку: ');

     readln(a);

     k:=0;

     for i:=1 to length(a) do

          if a[i]=' ' then k:=k+1;

     d:=k/length(a);

     writeln('Доля пробелов в строке ', d);

end.









Задача 4.

Заменить все буквы “а” на буквы “б” в заданной строке.

program zamena_ab;

uses crt;

var s: string;

      i: integer;

begin

     write('Введите строку: ');

     readln(s);

     for i:=1 to length(s) do

          if s[i]='а' then s[i]:='б';

     writeln(s);

end.

Задача 5.

Из заданной строки получить новую, повторив каждый символ дважды.

program udvsimv;

uses crt;

var s, ns: string;

      i, j, l: integer;

begin

     write('Введите строку: ');

     readln(s);

     l:=length(s);

     j:=1;

     for i:=1 to l do begin

          ns [5]:=s[3];

          ns[6]:=s[3];

          j:=j+2;

     end;

     for i:=1 to 2*l do write(ns[i]);

end.



s-Авраллр

i-12345678

Ns-ААвврр

J-123456

Задача 6.

Дано слово. Вывести слово, содержащее те же символы, но расположенные в обратном порядке.

program slovonaoborot;

uses crt;

var s: string;

      i: integer;

begin

     write('Введите слово: ');

     readln(s);

     for i:=length(s) downto 1 do write(s[i]);

end.

Задача 7.

Проверить, является ли заданное слово палиндромом.

program palindrom;

uses crt;

var s: string;

      i, l, m, k: integer;

begin

     write('Введите слово: ');

     readln(s);

     l:=length(s);

     m:=l div 2;

     k:=0;

     for i:=1 to m do

          if s[i]s[l+1-i] then k:=1;

     if k=1 then writeln('Слово “', s, '” не палиндром')

                else writeln('Слово “', s, '” палиндром');

end.

Задача 8.

Строка X состоит из нескольких предложений, каждое из которых кончается точкой, восклицательным или вопросительным знаком. Определить количество предложений в строке X.

program kolpredl;

uses crt;

var x: string;

      i, k: integer;

begin

     write('Введите строку: ');

     readln(x);

     k:=0;

     for i:=1 to length(x) do

          if (x[i]='.') or (x[i]='!') or (x[i]='?') then k:=k+1;

     writeln('В строке ', k, ' предложений');

end.

Задача 9.

Проверить правильность расстановки скобок в формуле. Расстановку считать правильной, если число открывающих скобок равно числу закрывающих скобок.

program skobki;

uses crt;

var f: string;

      i, ko, kz: integer;

begin

     write('Введите формулу: ');

     readln(f);

     ko:=0; kz:=0;

     for i:=1 to length(f) do begin

          if f[i]='(' then ko:=ko+1;

          if f[i]=')' then kz:=kz+1;

     end;

     if ko=kz then writeln('Правильная расстановка скобок')

                    else writeln('Неправильная расстановка скобок');

end.

Задача 10.

Проверить правильность расстановки скобок в формуле. Учитывать порядок скобок.

Способ 1

program skobki_1;

uses crt;

var f: string;

      i, k: integer;

begin

     write('Введите формулу: ');

     readln(f);

     i:=1; k:=0;

     repeat

          if f[i]='(' then k:=k+1;

          if f[i]=')' then k:=k-1;

          i:=i+1;

     until (klength(f));

     if k=0 then writeln('Правильная расстановка скобок')

                else writeln('Неправильная расстановка скобок');

end.


Способ 2

program skobki_2;

uses crt;

var f: string;

      i, k, z: integer;

begin

     write('Введите формулу: ');

     readln(f);

     k:=0; z:=0;

     for i:=1 to length(f) do begin

          if f[i]='(' then k:=k+1;

          if f[i]=')' then k:=k-1;

          if k

     end;

     if (k=0) and (z=0) then

          writeln('Правильная расстановка скобок')

          else

          writeln('Неправильная расстановка скобок');

end.


Задача 11.

В заданной строке подсчитать количество букв латинского алфавита.

program kolbukvlat;

uses crt;

var s: string;

      i, k: integer;

begin

     write('Введите строку символов: ');

     readln(s);

     k:=0;

     for i:=1 to length(s) do

          if (s[i]='A') and (s[i]='a') and (s[i]

               k:=k+1;

     writeln('В строке “', s, '” ', k, ' латинских букв');

end.

Задача 12.

Подсчитать количество цифр в заданной строке.

program kolcifr;

uses crt;

var s, c: string;

      i, j, k: integer;

begin

     write('Введите строку символов: ');

     readln(s);

     c:='0123456789';

     k:=0;

     for i:=1 to length(s) do

          for j:=1 to 10 do

               if s[i]=c[j] then k:=k+1;

     writeln('В строке “', s, '” ', k, ' цифр');

end.

Задача 13.

Из заданной строки получить новую, удалив из нее все пробелы.

program udalprobel;

uses crt;

var s, ns: string;

      i, k: integer;

begin

     write('Введите строку: ');

     readln(s);

     k:=0;

     for i:=1 to length(s) do

          if s[i]' ' then begin

               k:=k+1;

               ns[k]:=s[i];

          end;

     for i:=1 to k do write(ns[i]);

end.

Задача 14.

Из заданной строки получить новую, удалив все буквы латинского алфавита.

program udalbukv;

uses crt;

var s, ns: string;

      i, k: integer;

begin

     write('Введите строку: ');

     readln(s);

     k:=0;

     for i:=1 to length(s) do

          if (s[i]'Z') and (s[i]'z') then begin

               k:=k+1;

               ns[k]:=s[i];

          end;

     for i:=1 to k do write(ns[i]);

end.

Задача 15.

Подсчитать, сколько раз встречается в тексте заданный фрагмент.

program kolfragm;

uses crt;

var t, f: string;

      i, k: integer;

begin

     write('Введите текст: ');

     readln(t);

     write('Введите фрагмент: ');

     readln(f);

     k:=0;

     for i:=1 to length(t) do

          if copy(t, i, length(f))=f then k:=k+1;

     writeln('Фрагмент “', f, '” встречается в тексте ', k, ' раз(а)');

end.

Задача 16.

Проверить, является ли частью данного слова слово “сок”. Ответ должен быть “да” или “нет”.

program chastslova;

uses crt;

var s: string;

     i, f: integer;

begin

     write('Введите слово: ');

     readln(s);

     f:=0;

     for i:=1 to length(s) do

          if copy(s, i, 3)='сок' then f:=1;

     if f=1 then writeln('да')

               else writeln('нет');

end.

Задача 17.

В заданной строке всюду “1999” заменить на “2000”.

program zamena_1999;

uses crt;

var a: string;

      i: integer;

begin

     write('Введите строку: ');

     readln(a);

     for i:=1 to length(a) do

          if copy(a,i,4)='1999' then begin

               delete(a, i, 4);

               insert('2000', a, i);

          end;

     writeln(a);

end.

Задача 18.

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

program fio;

uses crt;

var s, f, i, o: string;

      p: integer;

begin

     write('Введите фамилию, имя и отчество: ');

     readln(s);

     p:=pos(' ', s);

     f:=copy(s, 1, p-1);

     delete(s, 1, p);

     p:=pos(' ', s);

     i:=copy(s, 1, 1);

     delete(s, 1, p);

     o:=copy(s, 1, 1);

     s:=f+' '+i+'.'+o+'.';

     writeln(s);

end.

Задача 19.

Подсчитать количество слов в исходной строке. Слова считать отделенными друг от друга одним пробелом.

program kolslov;

uses crt;

var s: string;

      i, k: integer;

begin

     write('Введите строку: ');

     readln(s);

     s:=s+' ';

     k:=0;

     for i:=1 to length(s) do

          if s[i]=' ' then k:=k+1;

     writeln('Количество слов в строке ', k);

end.

Задача 20.

Подсчитать количество слов в исходной строке. Слова считать отделенными друг от друга одним или несколькими пробелами.

program kolslov;

uses crt;

var s: string;

      i, k, f: integer;

begin

     write('Введите строку: ');

     readln(s);

     s:=s+' ';

     k:=0;

     f:=0;

     for i:=1 to length(s) do begin

          if (s[i]' ') and (f=0) then f:=1;

          if (s[i]=' ') and (f=1) then begin

               f:=0;

               k:=k+1;

          end;

     end;

     writeln('Количество слов в строке ', k);

end.

Задача 21.

Проверить цепочку слов на совпадение первой буквы следующего слова с последней буквой предыдущего слова.

program igra_v_slova;

uses crt;

var s: string;

      i, f: integer;

begin

     write('Введите слова через пробел: ');

     readln(s);

     f:=0;

     for i:=2 to length(s)-1 do

          if s[i]=' ' then

               if s[i-1]s[i+1] then f:=1;

     if f=0 then writeln('Совпадают')

               else writeln('Не совпадают');

end.

Задача 22.

Определить наименьшую длину слова в заданной строке. Слова считать отделенными друг от друга одним или несколькими пробелами.

program mindlina;

uses crt;

var s: string;

      i, lw, min: integer;

begin

     write('Введите строку: ');

     readln(s);

     s:=s+' ';

     min:=length(s);

     lw:=0;

     for i:=1 to length(s) do begin

          if s[i]' ' then

               lw:=lw+1

               else if (minlw) and (lw0) then begin

                    min:=lw;

                    lw:=0;

                    end

                    else

                    lw:=0;

     end;

     writeln('Наименьшая длина слова ', min);

end.

Задача 23.

Ввести с клавиатуры 10 слов и вывести их на экран в алфавитном порядке.

program sort_slov;

uses crt;

const n=10;

var s: array[1..n] of string;

      pp: string;

      i, j: integer;

begin

     writeln('Введите слова:');

     for i:=1 to n do

          readln(s[i]);

     for i:=1 to n-1 do

          for j:=i+1 to n do

               if s[i]s[j] then begin

                    pp:=s[i];

                    s[i]:=s[j];

                    s[j]:=pp;

               end;

     writeln('Список слов по алфавиту:');

     for i:=1 to n do

          writeln(s[i]);

end.



























Получите свидетельство о публикации сразу после загрузки работы



Получите бесплатно свидетельство о публикации сразу после добавления разработки


Олимпиады «Осенний фестиваль знаний 2024»

Комплекты учителю



Качественные видеоуроки, тесты и практикумы для вашей удобной работы

Подробнее

Вебинары для учителей



Бесплатное участие и возможность получить свидетельство об участии в вебинаре.


Подробнее