Показаны сообщения с ярлыком Строки. Показать все сообщения
Показаны сообщения с ярлыком Строки. Показать все сообщения

09.10.2024

Методы и функции строк в Python

Python - один из самых популярных языков программирования в мире благодаря своей простоте и мощности. Он предлагает широкий спектр инструментов для работы с различными типами данных, включая строки. В данной статье рассмотрим методы и функции строк в Python, которые помогут вам эффективно обрабатывать текстовую информацию.

Введение в методы и функции строк в Python

Строки играют важную роль в программировании, и в Python они представлены как неизменяемые последовательности символов. Для работы с строками в Python существует множество методов и функций, которые облегчают их обработку и манипуляции. Некоторые из основных методов строк в Python включают строка.upper() для преобразования в верхний регистр, строка.lower() для преобразования в нижний регистр, строка.strip() для удаления пробелов в начале и конце строки и строка.split() для разделения строки на подстроки. Функции, такие как len(строка), позволяют определить длину строки, а str() - преобразовать другие типы данных (числа, логические значения, списки и др.) в строку.

Основные операции с текстовыми данными

В Python существует множество полезных методов и функций для работы со строками, которые позволяют производить различные операции с текстовыми данными. Одной из основных операций является конкатенация, то есть объединение нескольких строк в одну. Это можно сделать с помощью оператора "+".

s = 'cat' + 'Barsik' 

получим 'catBarsik' 

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

s = 'cat'*3 

получим 'catcatcat'

Другой важной операцией является разделение строки на подстроки. Для этого используют метод split(), который разделяет строку на части по указанному разделителю и возвращает список подстрок.

a = 'A+B=C'.split('+') 

получим a = ['A','B=C']

Также можно объединять подстроки в одну строку с помощью метода .join().

a = ['hello','my','world']

s = ''.join(a)

получим s = 'hellomyworld'

В Python есть возможность замены подстрок в строке с использованием метода replace(). Этот метод позволяет заменить вхождения (все или указанное количество) одной подстроки на другую в заданной строке.

Пример 1

s = '1a1b11cd11'

s = s.replace('1','2')

print(s)

#2a2b22cd22 

#все символы 1 поменялись на символы 2

Пример 2

s = '1a1b11cd11'

s = s.replace('1','2',1) 

print(s)

#2a1b11cd11

# только первый символ 1 поменялся на 2

Пример 3

s = '1a1b11cd11'

s = s.replace('1','2',2)

print(s)

#2a2b11cd11

#первые два символа 1 поменялись на 2

Важно помнить, что строки в Python неизменяемы, поэтому большинство методов возвращают новую строку, а не изменяют исходную. Это позволяет обеспечить безопасность и предотвратить неожиданные изменения данных.

Поиск и замена подстрок в строках с помощью методов

Python предоставляет мощные методы для поиска и замены подстрок в строках. Один из таких методов - find(), который возвращает индекс первого вхождения подстроки в строку или -1, если подстрока не найдена. 

k = 'BBBASSA'.find('A')

print(k) #3

Для замены подстрок используется метод replace(), который заменяет вхождения (все или указанное количество) одной подстроки на другую (рассмотрели выше). 

Метод count() возвращает количество вхождений подстроки в строку. Он помогает быстро оценить, сколько раз повторяется определенная последовательность символов в строке.

k = 'BAOBAB BAOBAB'.count('AB')

print(k) #2

Работа с регистром символов и разделением строк

В Python есть множество методов для работы с регистром символов и разделением строк. Методы upper() и lower() позволяют преобразовать все символы строки в верхний и нижний регистр соответственно. Метод capitalize() делает первую букву строки заглавной, а метод title() делает каждое слово с большой буквы.

s = 'hello'.upper()

print(s) #HELLO

s = 'HeLLo'.lower()

print(s) #hello

s = 'hello'.capitalize()

print(s) #Hello

s = 'hey, my friend'.title()

print(s) #Hey, My Friend

Срезы строк

Срез (часть) строки можно взять следующим образом.

Пример 1

s = 'HELLO'

print(s[2:4]) #с символа с номером 2 до 4 (4 не включая).

#LL

Пример 2

s = 'HELLO'

print(s[:])

#HELLO

Пример 3

s = 'HELLO'

print(s[3:])

#LO

Пример 4

s = 'HELLOMYWORLD'

print(s[1:8:2]) # c символа с номером 1 до 8 (8 не включая) с шагом 2

#ELMW

Пример 5

s = 'HELLOMYWORLD'

print(s[::-1]) #реверс строки

#DLROWYMOLLEH

Решения конкретных задач с использованием строк вы сможете найти в разделе Разбор задач ЕГЭ.

28.02.2024

Найти подстроку максимальной длины, содержащую не более двух цифр 0. Программа на языке Python

Задача. Дана строка символов. Найти подстроку максимальной длины, содержащую не более двух цифр 0. Вывести найденную подстроку и ее дину (если таких подстрок несколько, вывести любую из них).

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

for k in range(len(s)): 

    for j in range(k,len(s)):        

        print(s[k:j+1])

Как будем решать задачу

  1. Запустим внешний цикл по счетчику k по длине строки.
  2. Обнулим счетчик p символов-цифр 0.
  3. Запустим внутренний цикл по счетчику j в диапазоне от значения внешнего счетчика цикла до конца строки.
    • Если символ строки это цифра 0, то увеличим счетчик цифр 0.
    • Если счетчик цифр 0 более 2, то прекратим обработку текущей подстроки командой break, в противном случае найдем максимум длины текущей подстроки.

Программа решения задачи на языке Python

s = "0a0bc00d04efgrt0habc0"

m = 0

for k in range(len(s)):

    p = 0 

    for j in range(k,len(s)):

        if s[j]=='0':

            p+=1 

        if p>2:

            break 

        else:

            if len(s[k:j+1])>=m: #найдем последнюю такую подстроку

                m = len(s[k:j+1])

                x = s[k:j+1]

print(x, len(x))

Результат запуска программы

Подстрока наибольшей длины

Проведем эксперимент с нейросетью. Сможет ли нейросеть написать код, решающий данную задачу?

Будем использовать нейросеть chatinfo.ru

Запрос. Дана строка символов. Найти подстроку максимальной длины, содержащую не более двух цифр 0. Вывести найденную подстроку и ее дину (если таких подстрок несколько, вывести последнюю из них).

Код от нейросети chatinfo.ru

def find_max_substring(string):

    max_length = 0  # Переменная для хранения длины максимальной подстроки

    max_substring = ""  # Переменная для хранения максимальной подстроки

    current_length = 0  # Переменная для хранения длины текущей подстроки

    current_substring = ""  # Переменная для хранения текущей подстроки

    zero_count = 0  # Переменная для отслеживания количества найденных нулей

    for char in string:

        if char == "0":

            zero_count += 1

            # Если найдено более двух нулей, обновляем текущую подстроку

            if zero_count > 2:

                current_length = 0

                current_substring = ""

                zero_count = 1

        current_length += 1

        current_substring += char

        # Если длина текущей подстроки больше длины максимальной подстроки,

        # обновляем значения максимальной длины и подстроки

        if current_length > max_length:

            max_length = current_length

            max_substring = current_substring

    return max_substring, max_length

# Пример использования

string = "0a0bc00d04efgrt0habc0"

max_substring, length = find_max_substring(string)

print("Максимальная подстрока:", max_substring)

print("Длина подстроки:", length)

Подстрока максимальной длины

Нейросеть не учла символ d в искомой подстроке, а значит и все символы (не равные 0), которые были бы в этом месте. Но попытка хорошая 👌 (тем более, что в один цикл).

24.02.2024

Как найти слова с цифрами. Программа на языке Паскаль, Python (применение множеств)

 Задача. С клавиатуры вводится строка слов, разделенных пробелами. Найти слова, содержащие цифры.

Разберем следующие способы решения:

  1. подсчитаем количество символов-цифр в слове ("в лоб", пройдя вдоль слова циклом),
  2. найдем длину множества, равного пересечению множества символов слова и множества символов-цифр.

Способ 1

  • Введем строку
  • Получим список слов, разделив строку по пробелу методом split()
  • Пройдем циклом по списку слов
    • подсчитаем количество символов-цифр методом countof()
    • если количество символов-цифр больше 0, выведем слово

Программа решения задачи на языке Паскаль

var s:string;

begin

  readln(s);

  var a:=s.Split();

  foreach var d in a do

  begin

    var t:=d.countof('0') + d.countof('1') + d.countof('2') + d.countof('3') + d.countof('4') + d.countof('5') + d.countof('6') + d.countof('7') + d.countof('8') + d.countof('9');

    if t>0 then println(d);

  end;

end.

Результат запуска программы

слова с цифрами

Способ 2

В отличие от предыдущего кода, пройдем по слову циклом и будем проверять, является ли символ слова цифрой (применим проверку за счет принадлежности множеству цифр), если да, то будем копить счетчик. Если после обработки слова счетчик цифр больше 0, то выведем слово.

Программа решения задачи на языке Паскаль

var s:string;

begin

  readln(s);

  var a:=s.Split();

  foreach var d in a do

  begin

    var t:=0;

    foreach var h in d do

    begin

      if h in ['0'..'9'] then t+=1;

    end;

    if t>0 then println(d);

  end;

end.

Способ 3

Для каждого слова получим множество его символов. Найдем пересечение полученного множества и множества символов-цифр, если длина множества больше 0, значит в слове были цифры, выведем слово.

Программа решения задачи на языке Паскаль

var s:string;

begin

  readln(s);

  var a:=s.Split();

  foreach var d in a do

  begin

    var m: set of char;

    m:=[];

    foreach var h in d do include(m,h);

    m:=m * ['0'..'9'];

    if m.count>0 then println(d);

  end;

end.

Покажем решение данной задачи на языке Python

Преобразуем слово к множеству и найдем пересечение с множеством цифр (операция &), если длина полученного множества больше 0, выведем слово.

Программа решения задачи на языке Python

s = input()

a = s.split()

for d in a:

    m = set(d) & set('0123456789')

    if len(m)>0:

        print(d)




Как получить все возможные подстроки из заданной строки на Питоне (Python)

Читать

Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита и цифры от 0 до 9 включительно. Определите максимальное количество идущих подряд символов, которые могут представлять запись числа в шестнадцатеричной системе счисления.

Читать

Последовательность максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е. ABCD. ЕГЭ по информатике. Задание № 24. Решение на языке Python

Читать

08.02.2024

Строки в Python. Split. Задачи. Перевертыш (палиндром)

 Задача. Дана строка слов, разделенных пробелами. Вывести слова в столбец.

Воспользуемся методом split(), который делит строку по заданному разделителю и возвращает список подстрок.

s = 'привет мир как дела'

a = s.split() #по умолчанию разделителем считается пробел

print(a)

Вывод:

['привет','мир','как','дела']

Для того, чтобы вывести слова в столбец воспользуемся циклом.

for k in a:

    print(k)

Вывод:

привет

мир

как

дела

Задача. Дана строка слов, разделенных пробелами. Найти количество слов перевертышей.

Проверим слово, является ли оно перевертышем (палиндромом), взяв срез от начала до конца строки с шагом -1.

s = 'шалаш1'

x = s[::-1]

print(x)

Вывод:

1шалаш

Программа решения задачи на языке Python

s = 'как тот кок готовил плов'

a = s.split()

k = 0

for t in a:

    x = t[::-1]

    if x == t:

        #print(x)

        k+=1

print(k)

Вывод:

3


Как получить все возможные подстроки из заданной строки на Питоне (Python)

Читать

Текстовый файл состоит из символов, обозначающих заглавные буквы латинского алфавита и цифры от 0 до 9 включительно. Определите максимальное количество идущих подряд символов, которые могут представлять запись числа в шестнадцатеричной системе счисления.

Читать

Последовательность максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е. ABCD. ЕГЭ по информатике. Задание № 24. Решение на языке Python

Читать

16.01.2024

Последовательность максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е. ABCD. ЕГЭ по информатике. Задание № 24. Решение на языке Python

Текстовый файл состоит не более чем из 106   заглавных букв латинского алфавита. Найдите последовательность максимальной длины, которая содержит буквы строго в алфавитном порядке, т.е. ABCD...  .

Для выполнения этого задания следует написать программу. Воспользуйтесь файлом abcd.txt. В ответе запишите длину искомой последовательности.

Как будем решать задачу

Воспользуемся алгоритмом, рассмотренном в публикации Найти наибольшую длину возрастающей последовательности.

Запустим цикл по длине строки  и будем сравнивать два соседних символа, если это действительно две соседние буквы алфавита, то будем увеличивать счётчик длины, в противном случае счетчик длины примем за 1. Затем найдем максимум среди значений счетчика длины. 

Как проверить, что два символа это соседние символы алфавита? 

В кодовой таблице символы латинского алфавита расположены по порядку. Соответственно их коды увеличиваются на 1. Значит два соседних символа алфавита имеют разницу кодов, равную 1.

Для вычисления кода символа будем использовать функцию ord().

Программа решения задачи на языке Python

f = open('abcd.txt')

s = f.readline()

k = 1

m = 1

for x in range(len(s)-1):

    if ord(s[x+1])-ord(s[x]) == 1:

        k+=1

    else:

        k = 1

    m = max(m,k)

print(m)

Ответ: 5

07.04.2023

Как инвертировать двоичный код. На примере задачи. Язык Паскаль. PascalABC.NET

 Задача. Автомат обрабатывает натуральное число N (1<=N<=255) по следующему алгоритму:

  • Строится восьмибитная двоичная запись числа.
  • Все цифры двоичной записи заменяются на противоположные (1 на 0, 0 на 1).
  • Полученное число переводится в десятичную запись.
  • Из нового числа вычитается исходное, полученная разность выводится на экран.

Какое число нужно ввести в автомат, чтобы в результате получилось 125?

В первую очередь разберемся, как инвертировать двоичную строку.

Воспользуемся методом Replace для того, чтобы заменить все подстроки на другие.

Пример:

s:='ОРИСОРИС';

s:=s.replace('РИС','ЛА');

Результат: s = ОЛАОЛА

Все подстроки РИС заменились на подстроки ЛА.

Тогда чтобы инвертировать двоичный код, нужно заменить все символы 1 на *, затем все символы 0 на символы 1, а затем все символы * на символы 0.

Пусть s = 101

1) все символы 1 заменим на *

s = *0*

2) все символы 0 заменим на 1

s = *1*

3) все символы * заменим на 0

s = 010

Сделаем это в одну строку:

s:=s.replace('1','*').replace('0','1').replace('*','0');

Как будем решать задачу

  • Запустим цикл по числам N
  • Выполним перевод числа N в двоичную систему счисления
  • Доведем разрядность двоичного кода до 8 (число восьмибитное)
  • Инвертируем полученное двоичное число
  • Выполним перевод полученной строки в десятичную систему счисления
  • Вычислим разность нового числа и исходного
  • Выполним проверку, если разность равна 125, то выводим число N на экран
Программа решения задачи на языке Паскаль

uses school;

var n,n1:integer; s,s1:string;

begin

 for n:=1 to 255 do

   begin

  s:=bin(n);

  s:='0'*(8-s.Length)+s;

  s1:=s.Replace('1','*').Replace('0','1').Replace('*','0');

  n1:=dec(s1,2);

  //println(s,s1);

  if n1-n=125 then println(n);

  end;

end.

Ответ: 65

16.12.2022

Задание 12. ЕГЭ по информатике. Редактор. Статград 25.10.22

Дана программа для редактора:

НАЧАЛО

ПОКА НЕ нашлось (00)

заменить (011, 20)

заменить (022, 10)

заменить (01, 220)

заменить (02, 110)

КОНЕЦ ПОКА

КОНЕЦ

Известно, что исходная строка A содержала ровно два нуля – на первом и на последнем месте, а также поровну единиц и двоек. После выполнения данной программы получилась строка B, содержащая 40 единиц и больше 50 двоек. Какое наименьшее количество двоек может быть в строке B?

! Ошибка. Решение перебором ищем! Нужно проанализировать, как меняются подстроки в соответствии с алгоритмом. Например, подстрока 1112 меняется на 22211. Остается только подобрать количество 1 и 2. 

Решение подбором (Phyton)

Решение системой уравнений (Phyton)


13.11.2022

Язык Паскаль. Автомат обрабатывает натуральное число N > 1. Для скольких значений N в результате работы алгоритма получится число, принадлежащее отрезку [150; 200]?

 Задача. Автомат обрабатывает натуральное число N > 1 по следующему алгоритму:

1. Строится двоичная запись числа N.

2. В конец записи (справа) дописывается вторая справа цифра двоичной записи.

3. В конец записи (справа) дописывается вторая слева цифра двоичной записи.

4. Результат переводится в десятичную систему.

Пример. Дано число N = 11. Алгоритм работает следующим образом:

1. Двоичная запись числа N: 1011.

2. Вторая справа цифра 1, новая запись 10111.

3. Вторая слева цифра 0, новая запись 101110.

4. Результат работы алгоритма R = 46.

Для скольких значений N в результате работы алгоритма получится число, принадлежащее отрезку [150; 200]?

Как будем решать задачу?

Будем искать число N, для которого результат работы алгоритма будет принадлежать отрезку [150; 200].

Обнулим искомый счетчик чисел r:=0.

Запустим цикл по подбираемым числам (по условию задачи это числа, больше 1, правую границу возьмем за 100, эту границу можно подбирать): 

for k:=2 to 100 do

За число N возьмем значение k.

Выполним перевод числа N в двоичную систему счисления: для этого пока число не равно 0, вычислим остаток от деления на 2 (это двоичная цифра), число уменьшим нацело в 2 раза. Чтобы получить двоичный код, превратим цифру n mod 2 в строку d процедурой str(n mod 2, d), и накопим строку s - это и будет двоичный код числа N, причем будем к вновь полученной цифре добавлять строку, тогда цифры двоичного кода будут получены в правильном порядке:

s:=d + s;

Далее по алгоритму, описанному в условии задачи, добавим к полученному коду предпоследний символ и второй символ, это и есть результат работы алгоритма:

s:=s+s[length(s)-1]+s[2];

Далее проверим, принадлежит ли полученный двоичный код результата диапазону чисел [150, 200].

Мы знаем, что числа из данного промежутка имеют длину 8 в двоичной коде, поэтому сравним принадлежность отрезку условием:

(length(s)=8) and (s>='10010110') and (s<='11001000')

Двоичный код числа 150 - это 10010110, а двоичный код числа 200 - это 11001000.

Если условие ИСТИНА, накопим искомый счетчик чисел r, также можно вывести само подходящее число N (это значение счетчика k, значение самой переменной N равно 0 из-за выполненного перевода).

Такую проверку осуществить быстрее, чем переводить полученную строку в десятичное значение.

Программа решения на языке Паскаль

var s,d:stringn,k,r:integer;

  begin

    r:=0;

    for k:=2 to 100 do

    begin

      n:=k; s:='';

      while n<>0 do

      begin

        str(n mod 2,d);

        s:=d+s;

        n:=n div 2;

      end;

      s:=s+s[length(s)-1]+s[2];

      if (length(s)=8)and(s>='10010110')and(s<='11001000')

          then begin print(k); r:=r+1; end;

    end;

    println('Количество чисел:',r);

  end.

Результат запуска программы

Результат запуска

Ответ к задаче: 12 чисел

Способ 2 (используем модуль School и функции bin и dec)

Будем использовать функцию bin из модуля School для перевода числа в двоичную систему счисления, результатом будет строка двоичных цифр.

Далее в соответствие с алгоритмом работы автомата изменим получившуюся двоичную строку. После получения результата, переведем строку в десятичный код функцией dec и выполним проверку условия.

Программа решения задачи на языке Паскаль

uses School;

var N,R,Kol:integer; B:string; 

  begin

    for N:=2 to 100 do

    begin

      B:=bin(N);

      B:=B+B[length(B)-1]+B[2];

      R:=dec(B,2);

      if R in [150..200] then Kol+=1;

    end;

    println(Kol);

  end.



27.05.2022

Задача на перестановки (Паскаль, Permutations(N))

Задача. Алексей составляет 5-буквенные слова из букв М, А, Г, И, С, Т, Р. Каждую букву можно использовать не более одного раза, при этом в слове нельзя использовать более одной гласной. Сколько различных кодов может составить Алексей?

Задачу на перестановки букв слова АВРОРА мы решили с использованием метода Permutations и множеств. 

В данной же задаче проблема заключается в том, что длина слова меньше, чем используемый алфавит. Будем использовать метод Permutations с аргументом N, позволяющий брать N символов из набора.

Пример:

Получим все слова из двух букв перестановками букв слова КОТ.

В массиве с сохраним буквы слова КОТ. Получим массивы перестановок функцией c.Permutations(2).

Программа на языке Паскаль

var c,x:array of char; s:string; 

begin   

    c:=new char[3];  

    c[0]:='К'; c[1]:='О'; c[2]:='Т'; 

    foreach x in c.Permutations(2) do   

     begin     

      s:=x.JoinToString;

      println(s);

     end; 

end.

Результат запуска программы

Слова по 2 из КОТ

Решим задачу про "МАГИСТРА"

Сохраним буквы М, А, Г, И, С, Т, Р в массиве c. Получим все перестановки по 5 символов циклом  foreach x in c.Permutations(5) do. Получим строку оператором s:=x.JoinToString

Если суммарное количество гласных букв ('А' и 'И') меньше или равно 1, то увеличим счетчик искомых слов t на 1.

Программа решения задачи на языке Паскаль

var c,x:array of char; s:string; 

    t:integer;

begin   

    c:=new char[7];  

    c[0]:='М'; c[1]:='А'; c[2]:='Г'; 

    c[3]:='И'; c[4]:='С'; c[5]:='Т';

    c[6]:='Р';

    t:=0;

    foreach x in c.Permutations(5) do   

     begin     

      s:=x.JoinToString;

      if (s.CountOf('А')+s.CountOf('И'))<=1 then t+=1;

     end; 

    println(t);

end.

Ответ: 1320


Как решить задачу на перестановки (Паскаль)

Задача. Петя составляет шестибуквенные слова перестановкой букв слова АВРОРА. При этом он избегает слов с двумя подряд одинаковыми буквами. Сколько всего различных слов может составить Петя?

Мы решали задачу о перестановках букв слова КОТ

Данную задачу будем решать подобным образом. Но необходимо учесть, что буквы в слове повторяются (буквы А и Р), а значит, нужно исключить повторяющиеся слова.

Как будем решать задачу

Для хранения уникальных (неповторяющихся) значений можно использовать множество.

Получим строки за счет перестановок элементов символьного массива методом Permutations, исключим по условию задачи строки с двумя подряд идущими буквами А или Р и подсчитаем количество элементов полученного множества.

Программа решения задачи на языке Паскаль

var a,x:array of char; s:string; n:set of string;      

begin   

  a:=new char[6];

  a[0]:='А';a[1]:='В';a[2]:='Р';a[3]:='О';a[4]:='Р';a[5]:='А';

  n:=[];  

  foreach x in a.Permutations do  

     begin   

     s:=x.JoinToString;   

     if not('АА' in s) and not ('РР' in s) then include(n,s);  

     end;

     println(n);

     print('Количество слов, которые составит Петя: ',n.count()); 

end.

Результат запуска программы

Перестановки букв АВРОРА


26.05.2022

Перестановки в Паскале (Permutations)

Дано слово КОТ. Получим все слова за счет перестановок с помощью программы на языке Паскаль.

Будем использовать динамический символьный массив c для хранения букв слова КОТ. С помощью метода Permutations и цикла foreach получим массивы перестановок x. Объединим элементы массива x в строку методом JoinToString и выведем строку s  на экран.

Программа на языке Паскаль

var c,x:array of char; s:string;

begin

  c:=new char[3];

  c[0]:='К'; c[1]:='О'; c[2]:='Т';

  foreach x in c.Permutations do

    begin

     s:=x.JoinToString;

     println(s);

    end;

end.

Результат запуска программы

Перестановки КОТ

А если буквы в слове повторяются? Сколько различных слов можно составить из букв слова ОКНО?


23.05.2022

Язык Паскаль. Как решить комбинаторную задачу про слова?

Валя составляет шестибуквенные слова из букв слова ГРОЗА. Сколько слов составит Валя, если на первом месте нельзя использовать букву З, на последнее место нельзя ставить гласные буквы, а буква Г должна встретиться в слове не более 1 раза?

Как будем решать задачу

Закодируем буквы цифрами от 1 до 5.

О – 1

А – 2

Г – 3

Р – 4

З – 5

Запустим цикл по числам n из промежутка от 111111 до 555555. Преобразуем число n в строку s процедурой str(n,s).

Выполним проверку условий:

1)      В строке есть символы ‘0’, ‘6’, ‘7’, ‘8’, ‘9’

2)      Последний символ строки – это ‘1’ или ‘2’

3)      Количество символов ‘3’ меньше или равно 1

4)      Первый символ строки – это 5

Если 1-ое условие ложно и 2-ое условие ложно и 3-е условие истинно и 4-ое условие ложно, то будем увеличивать счетчик подходящих слов t на 1.

Программа решения задачи на языке Паскаль

var n,t:integer; f1,f2,f3,f4:boolean;

    s:string;

begin

  for n:=111111 to 555555 do

  begin

    str(n,s);

    f1:=('0' in s) or ('6' in s) or ('7' in s) or ('8' in s) or ('9' in s);

    f2:=s[6] in ['1','2'];

    f3:=s.CountOf('3')<=1;

    f4:=s[1]='5';

    if (not f1) and (not f2) and f3 and (not f4) then t+=1;

  end;

  writeln('Количество слов, которые составит Валя: ',t);

end.

Результат запуска программы

Запуск программы


Данная программа нашла ответ за 1.166 с.

Как ускорить выполнение программы

Поскольку на последнем месте не может встретиться гласная буква, то есть цифры 1 и 2, то можно начать с числа 111113, на первом месте не может стоять буква З, то есть цифра 5, значит можно идти в цикле до числа 455555 и отказаться от проверки 4-ого условия.

В этом случае программа нашла ответ за 0.884 с.

05.05.2022

Функции count и countof в языке Паскаль (примеры использования в задачах)

Для подсчета количества каких-либо символов, имеющихся в строке, можно использовать функции:

  • countof
  • count

В чем разница этих функций, и как их применить к решению задач, разберём в этой публикации.

Функция countof

Пусть дана строка

s:='231привет2432';

Вычислим количество цифр '2':

d:=s.countof('2');

Функция s.countof('2') подсчитывает количество цифр 2 в строке s, и в качестве своего аргумента использует символ 2, заключенный в апострофы.

Пример задачи 1

С клавиатуры вводится строка. Найти количество символов 'Z'.

Программа решения на языке Паскаль

var s:string;k:integer;

begin

  readln(s);

  k:=s.Countof('Z');

  println(k);

end.

Пример задачи 2

С клавиатуры вводится строка. Верно ли, что строка содержит символ '9'?

Программа решения на языке Паскаль

var s:string;k:integer;

begin

  readln(s);

  k:=s.Countof('9');

  if k>0 then writeln('Строка содержит цифру 9')

         else writeln('В строке нет цифр 9');

end.

Функция count

Пусть дана строка

s:='flower555';

Вычислим количество цифр '5':

d:=s.count(c->c='5');

Функция s.count(c->c='5') в качестве своего аргумента принимает логическое выражение (условие). Переменная c в данном случае должна быть описана типом char в блоке var.

Преимуществом функции count перед функцией countof можно считать возможность применения сложных условий.

Пример задачи 1

С клавиатуры вводится строка. Найти количество символов 'Z' и 'A'.

Программа решения на языке Паскаль

var s:string;c:char;k:integer;

begin

  readln(s);

  k:=s.Count(c->(c='Z')or(c<='A'));

  println(k);

end.

Результат выполнения программы

Количество букв Z и A в строке

Пример задачи 2

С клавиатуры вводится строка. Найти количество символов цифр.

Программа решения на языке Паскаль

var s:string;c:char;k:integer;

begin

  readln(s);

  k:=s.Count(c->(c>='0')and(c<='9'));

  println(k);

end.

Результат выполнения программы

Количество символов цифр в строке

Пример задачи 3

Во введенной строке подсчитать все символы, кроме P.

Программа решения на языке Паскаль

var s:string;k:integer;c:char;

begin

  readln(s);

  k:=s.Count(c->not(c='P'));

  println(k);

end.

Результат выполнения программы

Количество символов строки кроме P

07.02.2022

Язык Паскаль. Найти в предложении самое длинное слово

Задача. Дано предложение s. Найти и вывести самое длинное слово.

Будем пользоваться алгоритмом выделения слов из предложения, мы рассматривали его ранее в этом блоге. Длины слов сравним, осуществляя алгоритм поиска максимума, само слово сохраним в переменной ymax.

Программа решения задачи на языке Паскаль

var s,y,ymax:string; k,m:integer;

begin

  writeln('Введите предложение');

  readln(s);

  s:=s+' ';

  y:='';

  for k:=1 to length(s) do

   if s[k]=' ' then begin

                     if length(y)>m then begin m:=length(y); ymax:=y; end;

                     y:='';

                    end

               else y:=y+s[k];

  writeln('Самое длинное слово: ',ymax);

end.

Результат запуска программы

результат запуска

06.02.2022

Язык Паскаль. Вывести слова предложения в столбец

Задача. Дано предложение s. Вывести все его слова в столбец.

Будем считать, что слова разделяются одним пробелом. Будем идти вдоль строки, если символ равен пробелу, то выводим накопленное слово y и обнуляем его, иначе копим слово y.

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

Программа решения задачи на языке Паскаль

var s,y:string; k:integer;

begin

  writeln('Введите предложение');

  readln(s);

  s:=s+' ';

  y:='';

  for k:=1 to length(s) do

   if s[k]=' ' then begin

                     writeln(y);

                     y:='';

                    end

               else y:=y+s[k];

end.

Результат запуска программы

результат запуска

Обратите внимание, что знак препинания "прилипает" к слову и в данном случае является его частью.

05.02.2022

Верно ли, что в строке имеется заданная подстрока?

Дана строка s. Верно ли, что в строке s имеется заданная подстрока y?

Для определения принадлежности некоторой подстроки заданной сроке будем использовать операцию вхождения in.

Программа решения на языке Паскаль:

var s,y:string;

begin

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

  readln(s);

  writeln('Введите подстроку');

  readln(y);

  if y in s then writeln('верно, подстрока ',y,' входит в строку ',s) else writeln('неверно, подстрока ',y,' не входит в строку ',s);

end.

03.02.2022

Как найти количество определенных символов в строке

Как найти количество определенных символов в строке?

Буква


Будем опираться на версию программы PascalABC.NET 3.8.2

Применим метод count, параметрами метода в данном случае выступают переменная типа char и условие, в нашем примере условие такое: символ c равен '%'. В примере строка s содержит три символа '%', поэтому ответ 3.

Программа решения на языке Паскаль:

var s:string;c:char;

begin

  s:='Ив%%ан%?№';

  writeln(s.Count(c->c='%')); {ответ: 3}

end.