Главная страница

Лабораторная № 3 Програмирование. Лаб3(2021). Лабораторная работа 3 по теме " Массивы и строки". Цель работы приобретение навыков получение навыков описания одномерных и двумерных массивов


Скачать 222.5 Kb.
НазваниеЛабораторная работа 3 по теме " Массивы и строки". Цель работы приобретение навыков получение навыков описания одномерных и двумерных массивов
АнкорЛабораторная № 3 Програмирование
Дата29.09.2022
Размер222.5 Kb.
Формат файлаdoc
Имя файлаЛаб3(2021).doc
ТипЛабораторная работа
#704511
страница7 из 8
1   2   3   4   5   6   7   8

Пример программы ввода последовательности символов


#include

using namespace std;

/* Вводится последовательность символов до нажатия клавиши "Enter".

Текст является десятичной записью числа, кратного 9*/

int main()

{

setlocale(LC_ALL, "rus");

char c;

long s;

long s1=0;

cout<<"Введите символы, конец ввода - Enter";

do

{

c=getchar();//считываем символ

if (c>='0' && c<='9')

{

s=int(c)-48;

s1=s1*10+s;

}

}

while (c!='\n'); //цикл до нажатия Enter

if (s1%9==0) cout<<" число делится на 9"<
else

cout << "число не делится на 9" << endl;

return 0;

}

Пример программы поиска и замены символов в строке разными способами


#include

#include

#include

#include   

#include

using namespace std;

int main()

{

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

system("chcp 1251");

//или

SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода

SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода

// объявление переменных начало

char strSource[200];

char strCharsAndPointer[200];

char strCharsAndLoop[200];

string strStringAndAlgorithm;

string strStringAndLoop;

//! параметризируем код, а не используем значения в коде напрямую

char sourceSymbol = 'д';

char replaceSymbol ='т' ;

// объявление переменных конец

cout << "Введите строку " << endl;

cin >> strSource;

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

strncpy_s(strCharsAndPointer, strSource, sizeof(strSource));

strncpy_s(strCharsAndLoop, strSource, sizeof(strSource));

strStringAndLoop = strSource;

strStringAndAlgorithm = strSource;

//работа со строкой как с массивом типа char

int N=strlen(strCharsAndLoop);

for (int i = 0; i < N; i++) {

if (strCharsAndLoop[i] == sourceSymbol) {

strCharsAndLoop[i] = replaceSymbol;

}

}

//использование библиотечной функции поиска и указателя

char* pointerToFoundChar;

pointerToFoundChar = strchr(strCharsAndPointer, sourceSymbol);

while (pointerToFoundChar != NULL)

{

*pointerToFoundChar = replaceSymbol;

pointerToFoundChar = strchr(strCharsAndPointer, sourceSymbol);

}

//работа со строкой с использованием типа string

for (int i = 0; i < strStringAndLoop.length(); i++) {

if (strStringAndLoop[i] == sourceSymbol) {

strStringAndLoop[i] = replaceSymbol;

}

}

//работа со строкой и стандартной библиотекой алгоритмов обработки контейнеров и алгоритмов

replace(strStringAndAlgorithm.begin(), strStringAndAlgorithm.end(), sourceSymbol, replaceSymbol);

cout << "Результат c char и циклом:" << endl;

cout << strCharsAndLoop << endl;

cout << "Результат c char и указателем:" << endl;

cout << strCharsAndPointer << endl;

cout << "Результат cо string:" << endl;

cout << strStringAndLoop << endl;

cout << "Результат cо string и algorithm:" << endl;

cout << strStringAndAlgorithm;

}


Пример отчёта для задания B


Задан текст, состоящий из слов, записанных через запятые, и заканчивающийся точкой. Длина текста не больше 200 символов. Необходимо выдать на экран слова и их длины. Если слово состоит только из цифр, то возвести его в куб. Выходная строка содержит нецифровые слова, в которых порядок символов изменен на обратный.

Словесный алгоритм:


  1. Ввод строки x

  2. m=0 (число слов, номер слова)

  3. Выделение памяти для y. y=”” (очистка строки результата)

  4. Выделение памяти для rez (rez – промежуточное поле для получения букв слова в обратном порядке).

  5. adrz=strstr(x,",") (Запоминание в adrz адреса символа строки x, равного ‘,’)

  6. Если adrz=NULL (нет такого символа), то adrz=strstr(x,".") (Запоминание в adrz адреса символа строки x, равного ‘.’)

  7. strncpy(slovm,x,adrz-x) (Копирование в slovm части строки x до запятой или до точки)

  8. slov m,adrz-x='\0' (Помещение в конец slovm символа конца строки)

  9. lengm=adrz-x (Длина строки)

  10. Вывод m, slovm,lengm

  11. i = strspn (slovm,cif) (Запоминание в i количества символов slovm, совпадающих с символами строки cif - цифры)

  12. Если i=lengm, то

12.1.slovcif=результату преобразования slov из строки в число

12.2.Вывод slovcif3

иначе

12.3. Очистка поля rez

12.4. j=0

12.5. Для jm выполнить

12.5.1. rezj=slovm,leng[m]-j-1 (изменение порядка символов)

12.5.2. j=j+1

12.6. strcat(y,rez) (присоединение к y перевернутого слова rez)

12.7. strcat(y,”,”) (присоединение к y запятой)

  1. m=m+1

  2. strcpy(x,adrz+1) (Копирование в x части после запятой)

  3. Если строка x не пуста, то п. 5

  4. Вывод y



Тесты:

Номер теста

Назначение теста

Входные данные

Выходные данные

1

В строке есть цифровые и нецифровые слова

x=abc,xyzt,20,5.

Word number 1 abc length 3

Word number 2 xyzt length 4

Word number 3 20 length 2

Cube 8000

Word number 4 5 length 1

Cube 125

cba,tzyx,

2

В строке есть только цифровые слова

x=20,5.


Word number 1 20 length 2

Cube 8000

Word number 2 5 length 1

Cube 125

3

В строке есть только нецифровые слова

x=abc,xyzt.

Word number 1 abc length 3

Word number 2 xyzt length 4

cba,tzyx,



Программа:

#include

#include

#include

void main(){char x[200],*slov[20],*rez,*y;

char cif[] = "1234567890";

int i,j,m,n,k,leng[20],slovcif,cub[20];

char *adrz;

cout<<"Input x"<
cin>>x;

m=0;n=0;k=0;y=new char[200];strcpy(y,"");

rez=new char[10];

do {

adrz=strstr(x,",");

if (adrz==NULL)

adrz=strstr(x,".");

slov[m]=new char[m];

strncpy(slov[m],x,adrz-x);

leng[m]=adrz-x;

slov[m][leng[m]]='\0';

cout<<"Word number "<
i = strspn (slov[m],cif);

if (i==leng[m]){slovcif=atoi(slov[m]); cub[k]=slovcif*slovcif*slovcif;

cout<<"Cube "<
else{strcpy(rez,"");for (j=0;j
m++;

strcpy(x,adrz+1);} while(strcmp(x,"")!=0);

cout<
}

1   2   3   4   5   6   7   8


написать администратору сайта