Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет №6

.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
238.59 Кб
Скачать

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ПУТЕЙ И СООБЩЕНИЯ

МИИТ

Кафедра ИТС

Отчёт №6

«Проектирование и отладка программ обработки строк»

Выполнила студентка

Группы УПМ-111

Мурзенко Е.И.

Проверила

Селецкая Н.Г.

Москва 2012

Задание №2.

Задана некоторая строка, состоящая из слов, разделенных символом «пробел». В конце записи стоит символ «точка». Составить структурированную программу, подсчитывающую, сколько раз заданный символ А встречается в слове с заданным номером В.

Метод решения.

Я ввожу некую строку и спрашиваю номер слова и символ, частоту встречаемости которого я буду искать. Я запускаю цикл, пока символ не равен точке, я проверяю условие, равен ли он пробелу. Если нет, то я увеличиваю i на единицу, если да , то я увеличиваю к на единицу и проверяю условие k==B-1. Если оно не выполняется, то я увеличиваю i на единицу, если выполняется, то я увеличиваю i на единицу и распечатываю k.Далее я вхожу в цикл, проверяя условие равен ли элемент пробелу. Если да, то я выхожу из цикла, если нет, то я проверяю условие s[i]==A, если оно выполняется, то я увеличиваю i и k на единицу, если нет, то увеличиваю на единицу только i. Проверив все условия и выйдя из главного цикла, я распечатываю n.

HIPO-диаграмма

Стрелка вправо 10

Подсчет количества символов А в слове с номером В

Ввод строки

Вывод количества символов А в слове с номером В

Блок-схема

Овал 11

начало

Блок-схема: данные 13

Ввод строки, А, В

Прямая соединительная линия 71

K=0;i=0;n=0;

Прямая соединительная линия 70

Блок-схема: решение 17 Прямая соединительная линия 63 Прямая соединительная линия 65

s[i]!='.'

Прямая соединительная линия 23 Прямая соединительная линия 25 Прямая соединительная линия 34

Прямая соединительная линия 29 Прямая соединительная линия 30 Прямая соединительная линия 31 Прямая соединительная линия 32

s[i]==' '

Прямая соединительная линия 27

k++;

Прямая соединительная линия 28 Прямая соединительная линия 33 Прямая соединительная линия 39

k==B-1

i++;

Блок-схема: данные 78

k

Прямая соединительная линия 24 Прямая соединительная линия 36

i++;

i++;

Прямая соединительная линия 55

Прямая соединительная линия 26 Прямая соединительная линия 35

i++;

s[i]!=' '

Прямая соединительная линия 48 Прямая соединительная линия 37 Прямая соединительная линия 38

s[i]==A

n++;i++;

i++;

Прямая соединительная линия 51

Прямая соединительная линия 50 Прямая соединительная линия 53

Прямая соединительная линия 54

Прямая соединительная линия 56 Прямая соединительная линия 59 Прямая соединительная линия 60

Прямая соединительная линия 62 Прямая соединительная линия 64

Прямая соединительная линия 66 Прямая соединительная линия 67

Блок-схема: данные 14

Вывод n

конец

Программа на языке С++

#include<iostream.h>

#include<string.h>

#include<stdio.h>

void main()

{char s[80];

cout<<" vvedite stroky:";

gets(s);

cout<<s;

int B,i,n;

char A;

cout<<"\n vvedite nomer slova:";

cin>>B;

cout<<"\n vvedite simvol:";

cin>>A;

int k;

k=0;

i=0;

n=0;

while (s[i]!='.')

{if (s[i]==' ')

{ k++;

if (k==B-1)

{cout<<k;

i++;

while (s[i]!=' ')

{if (s[i]==A)

{n++;

i++;}

else

i++;

}

}

else

i++;

}

else

i++;

}

cout<<"\n n="<<n;

}

Таблица тестовых данных.

vvedite stroky: adcd dhffy ajshfyyy.

vvedite nomer slova:2

vvedite simvol:d

n=1

vvedite stroky: fhyr fhyteer djsoov .

vvedite nomer slova:3

vvedite simvol:o

n=2

Листинг программы

vvedite stroky: fhyr fhyteer djsoov .

vvedite nomer slova:3

vvedite simvol:o

n=2

Вывод и анализ результатов

Я написала программу на языке С++, вычисляющую частоту встречаемости символа в слове. Программа работает верно. Навыки работы со строками мною усвоены.

Задание №1

Задана запись, состоящая из М слов. Каждое слово содержит N букв. Количество букв в записи кратно N. Составить структурированную программу печати слова, начинающегося с заданного символа A.

Метод решения.

Я ввожу некую строку и вычисляю её длину(записываю в к), присваиваю i=0. Запрашиваю длину слова n и символ, который буду искать. Dхожу в цикл пока i<k-n+1 с шагом n, сравниваю элемент строки с заданным символом, если он не равен, перехожу к следующему, если равен, то присваиваю j=i и захожу в цикл, пока i<j+n, вывожу элементы строки на экран и увеличиваю i++.

H

Ввод строки, содержащей М слов и N букв

IPO-диаграмма.

Вывод слова, начинающегося с заданного символа

Найти слово, начинающееся с заданного символа

Блок-схема.

начало

Ввод строки

k=strlen(M);i=0

i<k-n+1

M[i]==b

j=i

i<j+n

Вывод M[i]

i++;

i=i+n;

конец

Программа на языке С++

#include<iostream.h>

#include<string.h>

void main()

{int n;

int i,j;

char b,k;

cout<<"\n vvedite dliny slova=";

cin>>n;

cout<<"\n vvedite simvol=";

cin>>b;

char M[80];

cin>>M;

cout<<"stroka:"<<M<<’\n’;

k=strlen(M);

for (i=0;i<=(k-n+1);i=i+n)

{if (M[i]==b)

{j=i;

for(i=j;i<j+n;i++)

cout<<M[i];

}

}

}

Таблица тестовых данных

vvedite stroky: adcd dhff ajsh fyyy.

vvedite dliny slova: 4

vvedite simvol:d

вывод: dhff

Листинг программы

vvedite stroky: adcd dhff ajsh fyyy.

vvedite dliny slova: 4

vvedite simvol:d

вывод: dhff

Вывод

Я написала программу, для нахождения в строке слова, начинающегося с данного символа. Написанная мною программа работает верно. Техника работы со строкой, как с массивом, мною усвоена.

Задание №3

Задана некоторая запись длиной М, в которой могут быть любые символы, в том числе и «пробел». В начале и конце записи стоят пробелы. Составить структурированную программу образования массива Х, элементами которого являются количество символов между двумя последовательно расположенными пробелами.

HIPO-диаграмма.

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

Ввод строки, длиной М

Подсчитать количество символом между соседними пробелами

Блок-схема.

начало

Ввод строки s

ddjl

K=strlen(s); i=0; m=0;

i<k+1

s[i]!=’ ‘

A=m; m=0; i++;

m++; i++;

Вывод A

конец

Программа на языке С++

#include<iostream.h>

#include<string.h>

#include<stdio.h>

#include<conio.h>

void main()

{clrscr();

char s[80];

cout<<" vvedite stroky:";

gets(s);

cout<<s;

int k,A;

k=strlen(s);

int i,m;

m=0;

for (i=1;i<k+1;i++)

{if (s[i]!=' ')

{m++;

}

else

{A=m;

m=0;

cout<<A;

}

}

}

Таблица тестовых данных

Vvedite stroky: fgght dsf dsdegtg gdsz

Результат: 5 3 7 4

Листинг программы

Vvedite stroky: fgght dsf dsdegtg gdsz

Результат:5 3 7 4

Вывод.

Я написала программу образования массива Х, элементами которого являются количество символов между двумя последовательно расположенными пробелами. Написанная программа работает верно, что свидетельствует о том, что навыки работы со строками и массивами одновременно мною усвоены.

Задание №4

Задана запись , состоящая из букв. Количество букв кратно N. Всего в записи М слов. Длина слова равна N. Составить структурированную программу печати слова, в котором символ А встречается более двух раз.

H

Вывод слова, котором символ А встречается более двух раз

Ввод строки, содержащей М слов и N букв

IPO
-диаграмма.

Найти слово, котором символ А встречается более двух раз.

Блок-схема.

начало

Ввод строки

i=0;

;

i< k-n

d=I;j=I;m=0;

j<n+i

=+

M[j]==b

m++;

j++

m>2

s<d+n;

Вывод M[s]

s++;

i=i+n;

конец

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

#include<iostream.h>

#include<string.h>

void main()

{int n;

int i,j,k,d,m,s;

char b;

cout<<"\n vvedite dliny slova=";

cin>>n;

cout<<"\n vvedite simvol=";

cin>>b;

char M[80];

cin>>M;

cout<<"stroka:"<<M<<'\n';

k=strlen(M);

for (i=0;i<=(k-n);i=i+n)

{ d=i;

m=0;

for (j=i;j<i+n;j++)

if (M[j]==b)

m++;

if (m>2)

for (s=d;s<d+n;s++)

cout<<M[s];

}

}

Таблица тестовых данных.

vvedite stroky: adcd dfff ajsh fyyy.

Vvedite dliny slova:4

vvedite simvol:f

результат : dfffy

Листинг программы.

vvedite stroky: adcd dfffy ajshfyyy.

Vvedite dliny slova:4

vvedite simvol:f

результат : dfffy

Вывод.

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