Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Касаткин С., Раткевич И., Травова Н. - Лаборато...doc
Скачиваний:
1
Добавлен:
22.11.2019
Размер:
1.01 Mб
Скачать
  1. Программа, которая считывает строку символов и сортирует ее по возрастанию кодов символов

Программа иллюстрирует процесс формирования строки, удовлетворяющей условию.

#include<iostream>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<String.h>

#include <windows.h>

using namespace std;

int main()

{

if(SetConsoleCP(1251)==0)

{

cerr<<"Fialed to set codepage!"<<endl

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

char str1[81], str2[81];

int n=0;

cout << "Задайте строку символов\n";

cin.getline(str1, 80);

for (int i= 32; i<255; i++)

for (int j = 0; j < strlen(str1); j++)

if ( str1[j]+128 == i )

str2[n++] = i-128;

str2[n] = '\0';

cout << "Отсортированная строка:\n";

cout << str2 << endl;

_getch();

return 0;

}

  1. Программа перевода числа из десятичной системы счисления в двоичную

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

Первый вариант (с использованием указателя)

#include <iostream>

#include <iomanip>

#include <math.h>

#include <conio.h>

#include <String.h>

#include <windows.h>

using namespace std;

int main()

{

if(SetConsoleCP(1251)==0

{

cerr<<"Fialed to set codepage!"<<endl;//если не удалось установить кодовую страницу, вывод сообщения об ошибке

}

if(SetConsoleOutputCP(1251)==0)//тоже самое для вывода

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

long dec; // десятичное число, которое мы будем переводить

byte ost; // остаток от деления на 2 (двоичная цифра)

char tmp[81]; // строка, которая будет хранить двоичное (binary) число

cout << "Введите неотрицательное целое десятичное число ";

cin >> dec;

char *bin;

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

bin = &(tmp[80] = 0);

/* Присваиваем указателю bin значение, равное адресу последнего символа строки tmp */

do

{

ost = byte (dec % 2);

*(--bin) = ost + '0';

dec = dec / 2;

} while (dec);

/* Операция декремент (--bin) позволяет записывать цифры в строку в обратном порядке */

cout << "Соответствующее 2-ое число: ";

cout << bin << endl; // выводим значение по адресу bin, а не tmp!

_getch();

return 0;

}

/* При организации повторения программы, необходимо обратить внимание на то, что при каждом повторении указателю bin должнo присваиваться значение адреса последнего символа строки tmp */

Второй вариант ( с использованием индексации)

#include <iostream>

#include <iomanip>

#include <math.h>

#include <conio.h>

#include <String.h>

#include <windows.h>

using namespace std;

int main()

{

if(SetConsoleCP(1251)==0

{

cerr<<"Fialed to set codepage!"<<endl

}

if(SetConsoleOutputCP(1251)==0)

{

cerr<<"Failed to set OUTPUT page!"<<endl;

}

long dec;

byte ost;

char bin[81];

cout <<"Введите целое десятичное число --> ";

cin >> dec;

int i = 0; // номер символа в строке

do

{

bin[i++] = dec % 2 + '0'; // записываем цифры в начало строки

dec = dec / 2;

} while (dec);

bin[i] = ‘\0’; // Не забудем отметить конец строки

strrev(bin);

// Для получения правильного ответа строку необходимо перевернуть

cout<<"Соответствующее 2-ое число:\n";

cout<<bin<<endl;

_getch();

return 0;

}

/* Второй вариант может показаться более понятным, однако в этом случае нам пришлось воспользоваться функцией strrev () из библиотеки функций для работы со строками, а использование указателей дает нам больше возможностей по работе с ячейками памяти */

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.