Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
21
Добавлен:
30.05.2020
Размер:
428.13 Кб
Скачать

do

2;

//

остаток от деления на основание с/с

{ r = number %

number = number / 2;

//

частное от деления на

основание с/с

str [i++] = char (int('0')+r);

//получение в строке

переведенного числа

} while (number

>0);

//

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

обратном порядке

for(int j=0; j<i/2; j++)

// меняем порядок цифр числа

в строке на обратный

{ int c=str[j];

 

 

 

 

str[j]=str[i-j-1]; str[i-j-1]=c;

}

str[i]='\0';

cout<<" number (2 c/c): \n" << str <<endl; _getch();

return 0;

}

Перевод десятичного числа в с/с от 2-х до 10

(строка с переведенным числом заполняется с конца и затем сдвигается в начало)

int main ()

{

char st[17];

int i, osn, n, cn, r;

cout << " \nInput number:" << endl; cin >> n;

cout << " \n c/c??? " << endl; cin >> osn;

cn=n;

st[16] = '\0'; i=15;

do {r=n % osn; //получение следующей цифры n=n / osn;

st[i--] = r+'0'; //преобразование цифры в символ: (int)'0' = 48 и т.д.

} while (n>0); i++;

int j=0; while (st[i])

st[j++] = st[i++]; //сдвиг сформированной строки в начало st[j] = '\0';

cout << "10c/c: -->" << cn << endl; cout << osn << " c/c:" << st << endl; _getch();

return 0;

}

Перевод десятичного числа в шестнадцатеричное

int main

()

 

 

 

{

 

 

 

 

char st[5];

 

 

 

int i, n,

r;

 

 

 

cout << "

\nInput number 10c/c " << endl;

 

 

 

cin >> n;

\n10c/c: --> 16c/c:\n" << n << "

-->

";

 

cout << "

 

st[5] = '\0';

 

 

 

i=4;

16;

 

 

 

do {r=n %

 

 

 

n=n

/ 16;

 

 

 

if

(r<10)

//(int) '0' = 48

и т.д.

else

i--] = r + '0';

st[i--] = r + 55;

//(int) 'A' = 65

и т.д.

 

} while (n>0);

 

 

 

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

31

 

i++;

 

int j = 0;

 

while (st[i])

//удалим начальные пробелы

st[j++] = st[i++];

st[j] = '\0';

 

cout << st << endl;

 

_getch();

 

return 0;

 

}

 

Определение количества слов в фразе

enum itsaWord { NO, YES };

//NO=0, YES=1

 

int main()

 

// isWord

- «флаг» обработки слова

{

isWord = NO;

itsaWord

//YES когда читаются символы слова

 

 

//NO когда читаются пробельные символы

char ch = 'a';

//в начале работы NO

 

 

int wordcount = 0;

 

 

cout << "Enter a phrase:\n" << endl;

 

do {

 

 

 

ch = getche();

//aaaaa

bbbbb ccccc\r\n

if(ch==' ' || ch=='\r')

{

 

//это означает завершение слова

if( isWord == YES )

 

{

//счетчик слов

 

wordcount++;

 

isWord = NO;

//очистка «флага»

}

}

 

 

 

 

 

else

 

//установка флага на начало слова

if( isWord == NO )

 

isWord = YES;

//клавиша <Enter > : \r\n

} while( ch != '\r' );

cout << "\n---Word count is " << wordcount << "---\n"; _getch();

return 0;

}

Выделение слов в тексте по нажатию произвольной клавиши

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

#include <string.h> #include <ctype.h>

int main () {const int n=70;

char s[n],*st,str[n]; unsigned min;

bool flag=0;

cout << "input of string" << endl;

while (cin.getline(s, n))

//цикл ввода строк, выход – Ctrl+z

{ cout << endl;

 

st=strtok(s," ,.:;!?"); //выделение 1-ой лексемы (слова)

min=strlen(st);

//получение в min длины слова

strcpy_s(str,st);

//запоминание минимального слова

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

32

 

while (st!=NULL)

{cout << st << endl;

_getch();

for (unsigned j=0; j<=(strlen(st)-1);j++)

if (isalnum(st[j])) //проверка слова на буквы и цифры flag=1;

else

{

flag=0; break;

}

if (flag)

if (strlen(st)<min) {min=strlen(st); strcpy_s(str,st);

}

st=strtok(NULL," ,.:;!?");//выделение i-ой лексемы

} //end while выделения лексем

cout << "min dlina = " << min << "\nmin lexema = " << str<< endl; cout << "input of string or Ctrl+z" << endl;

}//end while ввода строк _getch();

return 0;

}

Сортировка вводимых с клавиатуры строк *

Вводимые строки помещаются в двумерный массив. Признак завершения ввода – STOP_STRING=“*!*”. Сортировка проводится по методу пузырька в порядке возрастания кода первого символа (по алфавиту). При сортировке перемещаются при необходимости не сами строки, а указатели на них. Для сравнения строк используется библиотечная функция strcmp().

//prot.h

void vvod_str (char **,const int, int&); void vyvod_str (char **, int);

void sortirovka (char **, int);

// stdafx.h

#pragma once

#define WIN32_LEAN_AND_MEAN #include <stdio.h>

#include <tchar.h>

// TODO: reference additional headers your program requires here #include <iostream>

#include <conio.h>

#include <string.h>

#include "prot.h" using namespace std;

//fun.cpp

#include "stdafx.h"

void vvod_str (char **mas_str,const int n, int &dn) { const char * STOP_STRING= "*!*";

cout << "Input of string:" << endl; for (int index=0; index<n; index++)

{cin>> mas_str[index];

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

33

 

//main.cpp
#include "stdafx.h"
int main()
{
const int STRING_NUMBER= 100; //количество строк
const int BUFFER_SIZE =81; //количество символов в строке char buffer [STRING_NUMBER][BUFFER_SIZE]; //двумерный массив строк char *pointers [STRING_NUMBER]; //массив указателей на строки
int dn; //количество введенных строк
//присваивание значений элементам массива указателей for (int index=0; index<STRING_NUMBER; index++)
pointers[index] = buffer[index];
//или pointers[index] = &buffer[index][0];
vvod_str(pointers, STRING_NUMBER, dn); //ввод строк vyvod_str(pointers, dn); //вывод строк

if (!strcmp(mas_str[index], STOP_STRING)) {dn=index;break;}

} }

void vyvod_str (char **mas_str, int n) {cout << "----------------------" << endl;

int m=n;

for (int index=0; m>0; m--)

cout << mas_str[index++] << endl;

}

void sortirovka (char **pointers, int n) {char *ptr;

for (int index=0; index<n; index++) for (int i=n-1; i > index; i--)

if (strcmp(pointers[i-1], pointers[i])>0) {ptr= pointers[i];

pointers[i] = pointers[i-1]; pointers[i-1] = ptr;

}

}

sortirovka (pointers, dn);

//сортировка строк

vyvod_str(pointers, dn);

 

_getch();

 

return 0;

 

}

 

Сортировка строк в зависимости от признака, передаваемого функции main() через аргумент argv *

Программа сортирует строки в лексикографическом порядке, возрастающем или убывающем в зависимости от признака, передаваемого функции main() через аргумент argv, и выводит их на стандартный вывод. Исходный текст программы с комментариями и подробное описание выполняемых действий, представлены в лекции 1.

Инвертирование строки с помощью рекурсивной функции

void reverse(); int main()

{ reverse(); cout << endl;

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

34

 

_getch(); return 0;

}

void reverse()

{char c= _getche();

if (c != 13) reverse(); //’\r’ cout << c;

return;

}

Текущий

Рекурсивный спуск

Рекурсивный

уровень

 

возврат

0

Reverse;

 

1

Ввод:‘H'; с != 13; Reverse;

Вывод:'Н';

2

Ввод:'Е'; c != 13; Reverse;

Вывод:’E';

3

Ввод:‘L'; c != 13; Reverse;

Вывод:'L';

4

Ввод:‘L'; c != 13; Reverse;

Вывод:’L';

5

Ввод:‘O'; c != 13; Reverse;

Вывод:‘O';

6

Нажатие <Enter> c = 13;

 

Программирование – лекция 13 (лекции Стрикелевой Л.В.)

35

 

Соседние файлы в папке Лабораторні роботи