
отчет №6
.docМОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ПУТЕЙ И СООБЩЕНИЯ
МИИТ
Кафедра ИТС
Отчёт №6
«Проектирование и отладка программ обработки строк»
Выполнила студентка
Группы УПМ-111
Мурзенко Е.И.
Проверила
Селецкая Н.Г.
Москва 2012
Задание №2.
Задана некоторая строка, состоящая из слов, разделенных символом «пробел». В конце записи стоит символ «точка». Составить структурированную программу, подсчитывающую, сколько раз заданный символ А встречается в слове с заданным номером В.
Метод решения.
Я ввожу некую строку и спрашиваю номер слова и символ, частоту встречаемости которого я буду искать. Я запускаю цикл, пока символ не равен точке, я проверяю условие, равен ли он пробелу. Если нет, то я увеличиваю i на единицу, если да , то я увеличиваю к на единицу и проверяю условие k==B-1. Если оно не выполняется, то я увеличиваю i на единицу, если выполняется, то я увеличиваю i на единицу и распечатываю k.Далее я вхожу в цикл, проверяя условие равен ли элемент пробелу. Если да, то я выхожу из цикла, если нет, то я проверяю условие s[i]==A, если оно выполняется, то я увеличиваю i и k на единицу, если нет, то увеличиваю на единицу только i. Проверив все условия и выйдя из главного цикла, я распечатываю n.
HIPO-диаграмма
Подсчет количества символов А в слове
с номером В
Ввод строки
Вывод количества
символов А в слове с номером В
Блок-схема
начало
Ввод строки, А, В
K=0;i=0;n=0;
s[i]!='.'
s[i]==' '
k++;
k==B-1
i++;
k
i++;
i++;
i++;
s[i]!=' '
s[i]==A
n++;i++;
i++;
Вывод 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
букв
Вывод слова,
начинающегося с заданного символа
Найти слово,
начинающееся с заданного символа
Блок-схема.
начало
Ввод строки
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
букв
Найти слово,
котором символ А встречается более
двух раз.
Блок-схема.
начало
Ввод строки
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
Вывод.
Я написала программу печати слова, в котором символ А встречается более двух раз. Написанная мною программа работает верно, из чего можно сделать вывод о том, что навык работы со строкой умною усвоен.