Пример выполнения лабораторной работы

Для примера рассмотрим следующую задачу. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Символами могут быть буквы латинского алфавита и цифры. Определить сумму цифр во введенном с клавиатуры тексте.

Обобщенный алгоритм решения данной задачи представлен на рис. 7.1.

 
 

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

set <char> simbols;

set <char> digits;

char *s1 = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";

char *s2 = "1234567890";

for(int i=0; i < strlen(s1); i++) {

simbols.insert(s1[i]);

}

for(int i=0; i < strlen(s2); i++) {

digits.insert(s2[i]);

}

Далее необходимо задать количество слов в массиве. Для хранения количества слов в массиве определена переменная n, значение которой можно задать непосредственно в тексте программы, а можно запросить у пользователя. Во втором случае для предотвращения ошибок ввода необходимо предусмотреть проверку корректности вводимых значений:

int n = 0;

do

{

cout << "Vvedite kolichestvo slov (ne bolee 10): ";

cin >> n;

if ((n <=0) || (n > 10))

cout << "Oshibka vvoda" << endl;

}while((n <= 0)||(n > 10));

Цикл do{}while() позволяет выполнить операторы тела цикла, по крайней мере, один раз. После ввода клавиатуры количества слов проверяется условие «значение переменной n не входит в множество целых чисел от 1 до 10». Если это условие выполняется, то выдается сообщение об ошибке и тело цикла повторяется еще раз, т.к. условие выхода из цикла («значение переменной n входит в множество целых чисел от 1 до 10») ложно. Если же пользователь вводит допустимое количество слов, то цикл завершается.

Теперь можно организовывать цикл по вводу и обработке массива слов. Используем для этого цикл for. В теле цикла, прежде всего, осуществляется ввод слова с клавиатуры и обнуление переменной, в которой накапливается сумма цифр i-го слова.

for (int i = 0; i < n; i++)

{

cout << "Vvedite slovo: ";

cin >> strs[i];

int tmp = 0;

Далее в блок-схеме алгоритма следует проверка символа на принадлежность его к цифрам, для чего организуется еще один цикл, в котором будет осуществляться перебор символов i-го слова. В программе мы несколько усложним алгоритм за счет добавления проверки символов на допустимость значений, т. е. условия, которое будет проверять принадлежность символа к множеству допустимых символов simbols.

for(int j = 0; j < strlen(strs[i]); j++)

{

if(simbols.count(strs[i][j]) == 1)

{

Если проверяемый символ допустимый, то проверяется его принадлежность к множеству цифр.

if(digits.count(strs[i][j]) == 1)

{

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

int k = strs[i][j] - 48;

tmp += k;

}

}

Если же проверяемый символ оказался недопустимый, то выдается сообщение об ошибке, обнуляется сумма цифр слова и уменьшается номер слова. Цикл For автоматически увеличивает параметр цикла, и такое «топтание» на месте позволит еще раз повторить ввод и обработку ошибочного слова. Команда break позволит досрочно выйти из цикла проверки символов i-го слова.

else

{

cout << "Vstretilsa nedopustimii simvol" << endl;

i--;

break;

}

После выхода из цикла проверки символов i-го слова происходит увеличение суммы цифр текущего слова.

sum += tmp;

}

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

cout << "Summa cifr = " << sum;

_getch();

return 0;

}

Итак, соединив фрагменты в единое целое, получим текст программы.


// Example_7.cpp: main project file.

#include "stdafx.h"

#include "iostream"

#include "conio.h"

#include <set>

#include <string>

using namespace std;

int main(array<System::String ^> ^args)

{

cout << " Avtor – Ivanov I.I., student gr. ISEbd-11" << endl;

cout << " Variant N 100" << endl;

cout << " Dan massiv slov proizvolnoi dlini, no ne previshaushih 80 simvolov. Simvolami mogut bit bukvi latinskogo alfavita i cifri. Opredelit summy cifr vo vvedennom c klaviaturi tekste." << endl << endl;

set <char> simbols;

set <char> digits;

char *s1 = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";

char *s2 = "1234567890";

for(int i=0; i < strlen(s1); i++) {

simbols.insert(s1[i]);

}

for(int i=0; i < strlen(s2); i++) {

digits.insert(s2[i]);

}

int n = 0;

do

{

cout << "Vvedite kolichestvo slov (ne bolee 10): ";

cin >> n;

if ((n <=0) || (n > 10))

cout << "Oshibka vvoda" << endl;

}while((n <= 0)||(n > 10));

char strs[10][80];

int sum = 0;

for (int i = 0; i < n; i++)

{

cout << "Vvedite slovo: ";

cin >> strs[i];

int tmp = 0;

for(int j = 0; j < strlen(strs[i]); j++)

{

if(simbols.count(strs[i][j]) == 1)

{

if(digits.count(strs[i][j]) == 1)

{

int k = strs[i][j] - 48;

tmp += k;

}

}

else

{

cout << "Vstretilsa nedopustimii simvol" << endl;

i--;

break;

}

}

sum += tmp;

}

cout << "Summa cifr = " << sum;

_getch();

return 0;

}


Варианты заданий

1. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Символами могут быть только заглавные латинские буквы. Найти и вывести все гласные буквы (без повторений), которые встретились в двух самых длинных словах.

2. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Символами могут быть только заглавные латинские буквы. Найти и вывести все глухие согласные буквы (без повторений), которые встретились в двух самых коротких словах.

3. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Элементами слов могут быть любые графические символы. Удалить из массива все слова, содержащие не меньше трех четных цифр.

4. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Символами могут быть только заглавные латинские буквы. Найти и вывести все слова, у которых число гласных букв превышает число согласных

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

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

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

8. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). В качестве символов могут использоваться только арабские цифры. Вывести те слова, у которых число четных цифр превышает число нечетных.

9. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Символами могут быть только заглавные латинские буквы. Найти слова, содержащие соответственно наибольшее и наименьшее количество гласных букв, и поменять их местами.

10. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Символами могут быть только заглавные латинские буквы. В самом коротком слове все согласные буквы заменить на букву 'A'.

11. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Элементами слов могут быть любые графические символы. В слове наименьшей длины удалить все гласные буквы и подсчитать их количество в этом слове.

12. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Элементами слов могут быть любые графические символы. Все цифры, содержащиеся в самом длинном слове этого массива, заменить на символ «*».

13. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Элементами слов могут быть любые графические символы. Вывести все четные цифры, содержащиеся в слове наибольшей длины, и вывести число повторений каждой этой цифры в этом слове.

14. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Элементами слов могут быть любые графические символы. Найти и вывести слово, содержащее наибольшее количество цифр.

15. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). В слове, котором обнаружено наибольшее количество шипящих букв, заменить их на символ '&'.

16. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Вывести все гласные буквы, содержащиеся в слове наибольшей длины, и вывести число повторений каждой этой буквы в этом слове.

17. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Вывести все согласные буквы, содержащиеся в слове наибольшей длины, и вывести число повторений каждой этой буквы.

18. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Элементами слов могут быть любые графические символы. Подсчитать количество символов во всех словах массива, отличных от заглавных латинских букв.

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

20. Дан массив из n слов произвольной длины, но не превышающей 80 символов. Слова могут содержать любые символы языка. Найти и вывести в самом длинном слове массива все символы, отличные от заглавных латинских букв.

21. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Слова могут содержать любые символы языка. Найти слова, содержащие соответственно наибольшее и наименьшее количество цифр, и поменять их местами.

22. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Слова могут содержать любые символы языка. Найти слова, содержащие соответственно наибольшее и наименьшее количество нечетных цифр, и поменять их местами.

23. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Слова могут содержать любые символы языка. Найти слова, содержащие соответственно наибольшее и наименьшее количество нечетных цифр, и поменять их местами.

24. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Слова могут содержать латинские буквы и цифры. Найти слова, содержащие соответственно наибольшее и наименьшее количество заглавных латинских букв, и поменять их местами.

25. Дан массив из n слов произвольной длины (длина слова не превышает 80 символов). Элементами слов могут быть любые символы. В слове наименьшей длины удалить все четные цифры и подсчитать их количество в этом слове.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: