Строки в программировании на языках высокого уровня
Работа добавлена: 2015-12-14





Московский авиационный институт

(Национальный исследовательский университет)

Факультет №3. Системы управления, информатика и электроэнергетика.

Кафедра 302.

Отчёт по лабораторной работе

по учебной дисциплине

Программирование на языках высокого уровня

на тему

“Строки”

Группа 3О-107Б.
Бригада №7.

Выполнил:

Жуков А.Н.
Принял:

Чечиков Ю.Б.

Татарникова Е.М.

Москва 2015г.

Оглавление

Задание……………………………………………………………………………………………………………………………………...…..2

Краткое описание программы……………………………………………………………………………………………………….3

Описание функций……………………………………………………………………………………………………………………..….4

Блок-схема………………………………………………………………………………………………………………………………………6

Код программы………………………………………………………………………………………………………………………………7

Корректные тесты…………………………………………………………………………….…………………………………………..10

Некорректные тесты……………………………………………………………………………………..……………………………..19

Вывод……………………………………………………………………………………………………………………………….…………..21

Задание

Кафедра 302       Курс: ИНФОРМАТИКА

Задание:  Строки

Файл исходных данных содержит символ и две строки. Написать, отладить и протестировать программу, выполняющую:

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

Чтение данных из файла производить с использованием функций ввода/вывода языка C++. Алгоритм должен быть параметризован; обмен данными с функциями должен осуществляться только через параметры; набор исходных данных хранится в файле.

Краткое описание программы

Программа считывает исходные данные из файла Input.txt, располагающегося в корневой папке программы. Исходные данные вида:

<Символ, кол-во повторений которого надо подсчитать в строках и сравнить где больше>

<Первая строка>

<Вторая строка>

Программа проверяет наличие файла Input.txt и наличие исходных данных в нем. Если на данном этапе обнаружены ошибки, программа выводит соответствующее сообщение на экран. Иначе программа выполняет поиск слов, которые встречаются и в первой и во второй строке, и единожды выводит их на экран. Далее программа подсчитывает количество символов в строках, которые совпадают с символом из исходных данных, сравнив значения, программа выводит сообщение о том, в какой строке заданный символ встречается чаще.

Описание функций

Псевдокод:

Цикл по i от 0 до тех пор пока str[i] не равняется нулевому байту

Инкремент счетчика lenth;

Возвращение значения lenth;

Псевдокод:

Вычисление длины строки str1 функцией StrLenth;

Цикл по i от 0 до длины строки str1;

Если str1[i] равен заданному символу symbol

 Инкремент счетчика q1;

Вычисление длины строки str2 функцией StrLenth;

Цикл по i от 0 до длины строки str2;

Если str2[i] равен заданному символу symbol

 Инкремент счетчика q2;

Если q1 > q2

Вывод сообщения: В первой строке заданный символ встречается чаще;

Если q1 < q2

Вывод сообщения: Во второй строке заданный символ встречается чаще;

Если q1 = q2 и q1 != 0

Вывод сообщения: Заданный символ одинаково часто встречается в строках;

Если q1 = q2 и q1 = 0

Вывод сообщения: Заданный символ в строках отсутствует;

Псевдокод:

Вычисление длины lenstr1 строки str1 с помощью функции StrLenth;

Пока str1[i] равен пробелу

 I++;

Пока i < lenstr1

{

Индекс начала слова sword1 = i;

Пока str1[i] не равно пробелу и нулевому байту

 I++;

Индекс конца слова eword1 = i – 1;

Цикл по m от sword1 до тех пор пока m не равна eword1 + 1

 {

 Массив слов WordsMas1[qwords1][n]=str1[m];

 n++;

}

Счетчик слов qwords1++;

Пока str1[i] равен пробелу

 I++;

}

i = 0;

Вычисление длины lenstr2 строки str2 с помощью функции StrLenth;

Пока str2[i] равен пробелу

 I++;

Пока i < lenstr2

{

Индекс начала слова sword2 = i;

Пока str2[i] не равно пробелу и нулевому байту

 I++;

Индекс конца слова eword2 = i – 1;

Цикл по m от sword2 до тех пор пока m не равна eword2 + 1

 {

 Массив слов WordsMas2[qwords2][n]=str2[m];

 n++;

}

Счетчик слов qwords2++;

Пока str2[i] равен пробелу

 I++;

}

Цикл по I от 0 до qwords1

Цикл по k от (i + 1) до qwords1

 Если строки WordsMas1[i] и WordsMas1[k] равны

  Затереть строку WordsMas[k];

Цикл по I от 0 до qwords1

Цикл по k от 0 до qwords2

 Если строки WordsMas1[i] и WordsMas2[k] равны

 {

  Вывод WordsMas1[i];

  Аварийный выход из цикла;

 }

Блок-схема программы

Код программы

/////////////////////////////////////////////////////////////////////////////////////////////

//                        МАИ    Кафедра 302    1 курс    ИНФОРМАТИКА                      //

/////////////////////////////////////////////////////////////////////////////////////////////

//   LANGUAGE: MS Visual Studio 2013 C++                                                   //

//   Project TYPE: Win 32 console                                                          //

//   Project NAME: Lab01_String                                                            //

//  *PROGRAMMERS: Жуков Александр, Алексеев Данила (7-ая бригада)                          //

//   Comment: Заданы символ и две строки, написать программу, которая ищет одинаковые слова//

//            в двух строках и определяет в какой строке заданный символ встречается чаще. //

/////////////////////////////////////////////////////////////////////////////////////////////

//         Created DATE: 18/02/2015          //         Last version DATE: 17/04/2015      //

/////////////////////////////////////////////////////////////////////////////////////////////

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

const int WhiteGround = system("color F0");//Цвет фона консоли

int StrLenth(char* str);//Функция вычисления длины строки

void StrSymbolMatch(char* str1, char* str2, char symbol);//Количество совпадений заданного символа в строке

void FindMatchWordsInTwoStrings(char* str1, char* str2);//Поиск и вывод совпавших слов в 1-ой и 2-ой строках

int main()

{

 сonst string FNAME = “Input.txt”;

 setlocale(LC_ALL, "RUS");//Подключение русского языка

///////////////////////////////////Объявление переменных/////////////////////////////////////

char symbol[2];//Заданный в файле символ

char str1[256] = {'\0'};//Заданная в файле строка 1

char str2[256] = {'\0'};//Заданная в файле строка 2

int lenstr1 = 0;//Реальная длина 1-ой строки

int lenstr2 = 0;//Реальная длина 2-ой строки

int i;//Воспомогательная переменные

//////////////////////////////////////Чтение из файла////////////////////////////////////////

ifstream fin;//Объявление переменной файла

fin.open(FNAME);//Открытие файла

if (!fin)//Условие наличия файла

{

 cout << "Ошибка! Файл отсутсвует." << endl;

 system("pause");

 return(1);

}

if (fin.eof())//Условие наличия элементов в файле

{

 cout << "Файл пуст!" << endl;

 fin.close();

 system("pause");

 return(2);

}

fin.getline(symbol, 2);//Чтение символа

fin.getline(str1, 256);//Чтение 1-ой строки

 fin.getline(str2, 256);//Чтение 2-ой строки

cout << "Считанный из файла символ: " << symbol << "." << endl;//Печать символа

cout << "Считанная из файла 1-ая строка: " << str1 << "." << endl;//Печать 1-ой строки

cout << "Считанная из файла 2-ая строка: " << str2 << "." << endl;//Печать 2-ой строки

fin.close();//Закрытие файла

for (i = 0; i <= 79; i++)//Разделение на экране

 cout << "_";

/////////////////////////////Вычисление реальных размеров строк//////////////////////////////

lenstr1 = StrLenth(str1);//Подсчет символов до нулевого байта в 1-ой строке

lenstr2 = StrLenth(str2);//Подсчет символов до нулевого байта во 2-ой строке

cout << "\nДлина 1-ой строки: " << lenstr1 << ", длина 2-ой строки: " << lenstr2 << "." << endl;

//////////////////////////////Поиск одинаковых слов в строках////////////////////////////////

cout << "Слова встречающиеся в обеих строках:" << endl;

FindMatchWordsInTwoStrings(str1, str2);

////////////////Выявление строки в которых чаще встречается заданный символ//////////////////

 StrSymbolMatch(str1, str2, *symbol);

system("pause");

return(0);

}//End main()

int StrLenth(char* str)

{

int i, lenth = 0;

for (i = 0; str[i] != '\0'; i++)//Подсчет символов до нулевого байта в 1-ой строке

 lenth++;

return lenth;

}

void StrSymbolMatch(char* str1, char* str2, char symbol)

{

int q1 = 0;//Счетчик

int lenstr1 = StrLenth(str1);//Длина строки

int i;

for (i = 0; i < lenstr1; i++)

 if (str1[i] == symbol)

  q1++;

int q2 = 0;//Счетчик

int lenstr2 = StrLenth(str2);//Длина строки

for (i = 0; i < lenstr2; i++)

 if (str2[i] == symbol)

  q2++;

 if (q1 > q2) cout << "\nВ 1-ой строке заданный символ \"" << symbol << "\" встречается чаще:";

if (q1 < q2) cout << "\nВо 2-ой строке заданный символ \"" << symbol << "\" встречается чаще:";

if ((q1 == q2) && (q1 != 0)) cout << "\nЗаданный символ \"" << symbol << "\" одинаково часто встречается и в 1-ой и во 2-ой строке.";

if ((q1 == q2) && (q1 == 0)) cout << "\nЗаданный символ \"" << symbol << "\" в строках отсутствует.";

cout << "\nВ 1-ой строке заданный символ встречается " << q1 << " раз(а)." << endl;

cout << "Во 2-ой строке заданный символ встречается " << q2 << " раз(а).\n" << endl;

}

void FindMatchWordsInTwoStrings(char* str1, char* str2)

{

int i = 0, k = 0, m = 0, n = 0;//Воспомогательные переменные

int qwords1 = 0;//Счетчик слов в 1-ой строке

int qwords2 = 0;//Счетчик слов во 2-ой строке

int sword1, eword1;//Индексы начала и конца слов 1-ой строки соотвественно

int sword2, eword2;//Индексы начала и конца слов 2-ой строки соотвественно

int lenstr1;//Реальная длина 1-ой строки

int lenstr2;//Реальная длина 2-ой строки

char WordsMas1[30][30] = { '\0' };//Массив из строк для записи слов из 1-ой строки

char WordsMas2[30][30] = { '\0' };//Массив из строк для записи слов из 2-ой строки

/////////////////////////////////////////////////////////////////////////////////////////////

lenstr1 = StrLenth(str1);//Подсчет символов до нулевого байта в строке

while (str1[i] == ' ')//Поиск начала первого слова в строке

 i++;

 

while (i < lenstr1)//Граница выполнения в рамках длины строки

 {

 sword1 = i;//Индекс начала слова

 while ((str1[i] != ' ') && (str1[i] != '\0'))//Перемещение по слову

  i++;

 eword1 = i - 1;//Индекс конца слова

 n = 0;

 for (m = sword1; m != (eword1 + 1); m++)//Запись слова в массив

 {

  WordsMas1[qwords1][n] = str1[m];

  n++;

 }

 qwords1++;//Инкремент счетчика слов в строке

 while (str1[i] == ' ')//Перемещение до следующего слова

  i++;

}

i = 0;

lenstr2 = StrLenth(str2);//Подсчет символов до нулевого байта в строке

while (str2[i] == ' ')//Поиск начала первого слова в строке

 i++;

while (i < lenstr2)//Граница выполнения в рамках длины строки

 {

 sword2 = i;//Индекс начала слова

 while ((str2[i] != ' ') && (str2[i] != '\0'))//Перемещение по слову

  i++;

 eword2 = i - 1;//Индекс конца слова

 n = 0;

 for (m = sword2; m != (eword2 + 1); m++)//Запись слова в массив

 {

  WordsMas2[qwords2][n] = str2[m];

  n++;

 }

 qwords2++;//Инкремент счетчика слов в строке

 while (str2[i] == ' ')//Перемещение до следующего слова

  i++;

}

for (i = 0; i < qwords1; i++)//Затирание одинаковых слов в 1-ой строке

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

  if (strcmp(WordsMas1[i], WordsMas1[k]) == 0)

   *WordsMas1[k] = { '\0' };

for (i = 0; i < qwords1; i++)//Цикл сравнения слов 1-ой и 2-ой строк

 for (k = 0; k < qwords2; k++)

  if (strcmp(WordsMas1[i], WordsMas2[k]) == 0)

  {

   cout << WordsMas1[i] << ' ';

   break;//Выход из цикла чтобы не повторять вывод

  }

}

Корректные тесты

Тест №1

Цель: Проверка работы программы при совпадении всех слов при следующих входных данных:

ь

один два три четыре пять шесть

шесть пять четыре три два один

Ожидаемый результат:

Длина 1-ой строки: 30, длина 2-ой строки: 30

Слова встречающиеся в обеих строках: один два три четыре пять шесть

Заданный символ одинаково часто встречается и в 1-ой и во 2-ой строке

Результат работы программы:

Вывод: Тест ошибок не выявил.

Тест №2

Цель: Проверка работы программы при наличии совпадающих слов при следующих входных данных:

ь

один два три четыре пять шесть семь восемь

сто три двести восемь два девять

Ожидаемый результат:

Длина 1-ой строки: 42, длина 2-ой строки: 32

Слова встречающиеся в обеих строках: два три восемь

В 1-ой строке заданный символ встречается чаще

Результат работы программы:

Вывод: Тест ошибок не выявил.

Тест №3

Цель: Проверка работы программы при повторении совпадающих слов при следующих входных данных:

ь

один два три четыре пять шесть семь восемь

восемь сто двести пять пять восемь один

Ожидаемый результат:

Длина 1-ой строки: 42, длина 2-ой строки: 40

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

Заданный символ одинаково часто встречается и в 1-ой и во 2-ой строке

Результат работы программы:

Вывод: Тест ошибок не выявил.

Тест №4

Цель: Проверка работы программы при многократном повторении слова в строках при следующих входных данных:

о

один сто два сто три сто сто четыре сто

сто пять сто сто шесть сто семь

Ожидаемый результат:

Длина 1-ой строки: 39, длина 2-ой строки: 31

Слова встречающиеся в обеих строках: сто

В 1-ой строке заданный символ встречается чаще

Результат работы программы:

Вывод: Тест ошибок не выявил.

Тест №5

Цель: Проверка работы программы при лишних пробелах между слов при следующих входных данных:

о

  один два   три четыре пять   шесть семь   восемь

восемь   сто двести     пять   пять   восемь   один

Ожидаемый результат:

Длина 1-ой строки: 46, длина 2-ой строки: 45

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

Заданный символ одинаково часто встречается и в 1-ой и во 2-ой строке 

Результат работы программы:

Вывод: Тест ошибок не выявил.

 

Тест №6

Цель: Проверка работы программы при совпадении заданного символа чаще в первой строке при следующих входных данных:

р

один два три четыре пять шесть семь восемь

восемь сто двести пять пять восемь один

Ожидаемый результат:

Длина 1-ой строки: 42, длина 2-ой строки: 39

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

В 1-ой строке заданный символ встречается чаще

Результат работы программы:

Вывод: Тест ошибок не выявил.

Тест №7

Цель: Проверка работы программы при совпадении заданного символа чаще во второй строке при следующих входных данных:

о

один два три четыре пять шесть семь восемь

восемь сто двести пять пять восемь один

Ожидаемый результат:

Длина 1-ой строки: 42, длина 2-ой строки: 39

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

Во 2-ой строке заданный символ встречается чаще

Результат работы программы:

Вывод: Тест ошибок не выявил.

Тест №8

Цель: Проверка работы программы при отсутствии совпадений символа в строках при следующих входных данных:

й

один два три четыре пять шесть семь восемь

восемь сто двести пять пять восемь один

Ожидаемый результат:

Длина 1-ой строки: 42, длина 2-ой строки: 39

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

Заданный символ в строках отсутствует

Результат работы программы:

Вывод: Тест ошибок не выявил.

Тест №9

Цель: Проверка работы программы при одинаково частом совпадении символа в обеих строках при следующих входных данных:

н

один два три четыре пять шесть семь восемь

восемь сто двести пять пять восемь один

Ожидаемый результат:

Длина 1-ой строки: 42, длина 2-ой строки: 39

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

Заданный символ одинаково часто встречается и в 1-ой и во 2-ой строках

Результат работы программы:

Вывод: Тест ошибок не выявил.

Некорректные тесты

Тест №1

Цель: Проверка работы программы при отсутствии файла с исходными данными

Ожидаемые результаты: Ошибка! Файл отсутствует.

Результат работы программы:

Вывод: Тест ошибок не выявил.

Тест №2

Цель: Проверка работы программы при пустом файле с исходными данными

Ожидаемые результаты: Ошибка! Файл пуст.

Результат работы программы:

Вывод: Тест ошибок не выявил.

Тест №3

Цель: Проверка работы программы при отсутствии совпадающих слов при следующих входных данных:

ь

один два три четыре пять шесть семь восемь

сто двести триста

Ожидаемый результат:

Длина 1-ой строки: 42, длина 2-ой строки: 17

Слова встречающиеся в обеих строках: Нет, слов встречающихся в обеих строках

В 1-ой строке заданный символ встречается чаще

Результат работы программы:

Вывод: Тест ошибок не выявил.

Вывод

Разработка программы выполнена на основании того, что :




Возможно эти работы будут Вам интересны.

1. Программирование на языках высокого уровня

2. Представление о программировании: язык программирования (на примере одного из языков высокого уровня); примеры несложных программ с линейной, ветвящейся и циклической структурой

3. Программирование на языке высокого уровня

4. Метафоры и метонимии в звучащих и жестовых языках

5. Общая характеристика объектов в языках программирования

6. Передача параметров из командной строки

7. Разложение определителя по элементам строки

8. Створення інструментальної лінійки та строки статусу

9. Организация ввода вывода в языках программирования. Понятие потока. Потоковые классы

10. СЕМАНТИЧЕСКАЯ ХАРАКТЕРИСТИКА ФРАЗЕОЛОГИЧЕСКИХ ЕДИНИЦ, РЕПРЕЗЕНТИРУЮЩИХ КОНЦЕПТ «БОГАТСТВО» В АНГЛИЙСКОМ И РУССКОМ ЯЗЫКАХ