107.86K
Category: informaticsinformatics

Строки. Обработка строк. Решаем задачи ЕГЭ № 24

1.

Строки. Обработка строк.
Решаем задачи ЕГЭ № 24
Курсы ИСОТ МГТУ им. Н. Э. Баумана
https://isot.bmstu.ru/

2.

Спецификация задач: задача № 24
• Новые задачи 2021 года
• Умение создавать собственные программы (10–20 строк) для
обработки символьной информации
• Содержание: Цепочки (конечные последовательности), деревья,
списки, графы, матрицы (массивы), псевдослучайные
последовательности
• Умение: Строить информационные модели объектов, систем и
процессов в виде алгоритмов
• Уровень сложности: высокий
• Примерное время выполнения: 18 минут

3.

Решение задач № 24 (ДЕМО-2021)

4.

Решение через строки: Python
f = open('24.txt', 'r')
s = f.read()
maxN = 0
currentN = 0
for i in range(1, len(s)):
if s[i-1] != s[i]:
currentN += 1
if currentN > maxN:
maxN = currentN
else:
currentN = 0
print(maxN+1)
f.close()

5.

Решение через строки: Pascal
var
currentN, maxN, i: longint;
s: string;
begin
for i := 2 to s.Length do
begin
if s[i-1] <> s[i] then
begin
Assign(input, '24.txt');
currentN := currentN + 1;
readln(s);
if currentN > maxN then
maxN := 0;
maxN := currentN;
currentN := 0;
end
else
begin
currentN := 0;
end;
end;
writeln(maxN + 1);
end.

6.

Решение через строки: C++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
ifstream f("24.txt", ios::in);
int maxN = 0;
int currentN = 0;
string s;
f >> s;
for(int i = 1; i < s.size(); i++){
if (s[i-1] != s[i]){
currentN += 1;
if (currentN > maxN)
maxN = currentN;
}
else{
currentN = 0;
}
}
cout << maxN+1;
f.close();
}

7.

Решение через символы: Python
f = open('24.txt', 'r')
maxN = 0
currentN = 0
cNew = f.read(1)
while 1:
cOld = cNew
cNew = f.read(1)
if cNew == '': break
if cOld != cNew:
currentN += 1
if currentN > maxN:
maxN = currentN
else:
currentN = 0
print(maxN+1)
f.close()

8.

Решение через символы: Pascal
var
f: text;
while not eof(f) do
begin
currentN, maxN, i: longint;
cOld := cNew;
cNew, cOld: char;
read(f, cNew);
begin
Assign(f, '24.txt');
if cOld <> cNew then
begin
Reset(f);
currentN := currentN + 1;
maxN := 0;
if currentN > maxN then
currentN := 0;
maxN := currentN;
end
read(f, cNew);
else
begin
currentN := 0;
end;
end;
writeln(maxN + 1);
end.

9.

Решение через символы: C++
#include <iostream>
while(!f.eof()){
#include <fstream>
cOld = cNew;
using namespace std;
f >> cNew;
if (cOld != cNew){
int main(){
currentN += 1;
ifstream f("24.txt", ios::in);
if (currentN > maxN)
maxN = currentN;
int maxN = 0;
}
int currentN = 0;
else{
char cNew, cOld;
currentN = 0;
f >> cNew;
}
}
cout << maxN+1;
f.close();
}

10.

Подсчёт макс. последовательности X: Python
f = open('24.txt', 'r')
s = f.read()
maxN = 0
currentN = 0
for i in range(0, len(s)):
if s[i] == 'X':
currentN += 1
if currentN > maxN:
maxN = currentN
else:
currentN = 0
print(maxN)
f.close()

11.

Подсчёт макс. последовательности X: Pascal
var
currentN, maxN, i: longint;
s: string;
begin
for i := 1 to s.Length do
begin
if s[i] = 'X' then
begin
Assign(input, '24.txt');
currentN := currentN + 1;
readln(s);
if currentN > maxN then
maxN := 0;
maxN := currentN;
currentN := 0;
end
else
begin
currentN := 0;
end;
end;
writeln(maxN);
end.

12.

Подсчёт макс. последовательности X: C++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
ifstream f("24.txt", ios::in);
int maxN = 0;
int currentN = 0;
string s;
f >> s;
for(int i = 0; i < s.size(); i++){
if (s[i] == 'X'){
currentN += 1;
if (currentN > maxN)
maxN = currentN;
}
else{
currentN = 0;
}
}
cout << maxN;
f.close();
}

13.

Подсчёт макс. последовательности XYZ: Python
f = open('24.txt', 'r')
s = f.read()
maxN = 0
currentN = 0
i=0
while i < len(s) - 2:
if s[i] == 'X' and s[i+1] == 'Y' and s[i+2] == 'Z':
currentN += 3
if currentN > maxN:
maxN = currentN
i += 3
else:
currentN = 0
i += 1
print(maxN)
f.close()

14.

Подсчёт макс. последовательности XYZ: Pascal
var
currentN, maxN, i: longint;
s: string;
begin
while i <= s.Length-2 do
begin
if (s[i] = 'X') and (s[i+1] = 'Y') and (s[i+2] = 'Z') then
begin
Assign(input, '24.txt');
currentN := currentN + 3;
readln(s);
if currentN > maxN then
maxN := 0;
maxN := currentN;
currentN := 0;
i := 1;
i := i + 3;
end
else
begin
currentN := 0;
i := i + 1;
end;
end;
writeln(maxN);
end.

15.

Подсчёт макс. последовательности XYZ: C++
#include <iostream>
int i = 0;
#include <fstream>
while (i < s.size() - 2){
#include <string>
if (s[i] == 'X' && s[i+1] == 'Y' && s[i+2] == 'Z'){
using namespace std;
currentN += 3;
if (currentN > maxN)
int main(){
maxN = currentN;
ifstream f("24.txt", ios::in);
i += 3;
}
int maxN = 0;
else{
int currentN = 0;
currentN = 0;
string s;
i += 1;
f >> s;
}
}
cout << maxN;
f.close();
}

16.

Строковые функции и методы
Python:
https://www.w3schools.com/python/python_ref_string.asp
Pascal:
http://pascalabc.net/downloads/pabcnethelp/index.htm?page=LangG
uide/Types/string.html
С++:
https://en.cppreference.com/w/cpp/string/basic_string

17.

Дополнительные задания
• Подсчитать количество слов в файле
• Подсчитать количество строчных и прописных букв
• Определить количество слов-палиндромов в файле. Слова в
файле разделены пробелами.
• Узнать самый частый символ в файле.
• Найти и записать самое длинное слово в файле.

18.

Ссылка на работу по теме
https://inf-ege.sdamgia.ru/test?id=7897534
English     Русский Rules