Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kasatkin_S__Ratkevich_I__Travova_N_-_Laborato.doc
Скачиваний:
93
Добавлен:
15.02.2016
Размер:
1.01 Mб
Скачать
  1. Программа перевода числа из 2-ой системы счисления в 16-ую.

В этом примере перевод выполняется по таблице, в которой каждой четверке двоичных цифр соответствует одна шестнадцатеричная.

В программе используется структура TableString, описывающая одну строку таб­ли­цы.

#include <iostream>

#include <iomanip>

#include <math.h>

#include <conio.h>

#include <string>

#include <ctype.h>

#include <windows.h>

using namespace std;

struct TableString

{

char hex; // 16-ая цифра

char bin[5];

// строка, содержащая четверку 2-х цифр (строка заканчивается ‘\0’)

};

int main()

{

if(SetConsoleCP(1251)==0)

{

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

}

if(SetConsoleOutputCP(1251)==0)

{

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

}

char ch; // используется для посимвольного ввода

int n=0, k=0 ; // счетчики символов

char hex[21]; // 16-е число

char bin[81]; // 2-е число

char zero[81]; // строка, в начале которой будет записан ‘0’

char tmp[5];

// сюда будет копироваться четверка двоичных цифр из строки bin

strcpy(zero,"0"); // записываем ноль в начало строки

cout<<"Введите 2-ое число: \n";

while ( ( ch=_getch() ) != '\r') // пока не нажата клавиша <Enter>

{

if ( (ch=='0'||ch=='1') && k < 79) // если введена 2-я цифра

{

cout<<ch; bin[k++]=ch;

// Выводим ее на экран и записываем в строку

}

else if (ch == '\b' && k > 0 )

// стирание последнего введенного символа

{

cout<<"\b \b";

k--;

}

} //end while

bin[k]=0; hex[n]=0; cout << endl;

//делаем длину строки кратной 4:

while(strlen(bin)%4)

{

strcpy(bin,strcat(zero,bin)); /* складываем строку, содержащую ‘0’, с bin, затем полученную сумму копируем в bin, в результате в начало bin добавляется ‘0’ */

strcpy(zero,"0"); /* восстанавливаем zero, она должна содержать только 1 ноль*/

}

Cout << bin << endl; // проверим, что получилось

// Перевод:

TableString table[16] = { {'0', "0000"}, /* обратите внимание на то, как инициа// лизируется массив структур */

{'1', "0001"}, {'2', "0010"},

{'3', "0011"},

{'4', "0100"},

{'5', "0101"},

{'6', "0110"},

{'7', "0111"},

{'8', "1000"},

{'9', "1001"},

{'A', "1010"},

{'B', "1011"},

{'C', "1100"},

{'D', "1101"},

{'E', "1110"},

{'F', "1111"} };

// проходим по 2-му числу, обрабатывая по 4 цифры:

for (int i=0; i<strlen(bin); i+=4)

{

strncpy(tmp,bin+i,4); // копируем очередные 4 цифры в tmp

tmp[4] = '\0'; // strncpy() признак конца строки не записывает

for (int j=0; j<16; j++) // выполняем поиск в таблице

if (!strcmp(table[j].bin,tmp)) // если strcmp() вернула 0, значит tmp совпала с i-ой строкой таблицы

{

hex[n++]=table[j].hex; /* копируем 16-ю цифру из таблицы в строку hex */

break;

}

}

hex[n] = '\0';

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

cout<<hex<<endl;

_getch();

return 0;

}

  1. Программа, которая выводит на экран треугольник Паскаля (треугольник биноминальных коэффициентов)

Программа иллюстрирует применение строк для центрирования по горизонтали при выводе результата

#include<iostream>

#include<windows.h>

#include<iomanip>

#include<math.h>

#include<conio.h>

#include<string>

#include<ctype.h>

#include <stdlib.h>

using namespace std

/* Для вычисления каждого биноминального коэффициента используем рекурсивную функцию из Лаб. работы №3.*/

int C(int m, int n)

{

if (m == 0 || m == n)

return 1;

else return C(m,n-1)+C(m-1, n-1);

}

int main()

{

if(SetConsoleCP(1251)==0)

{

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

}

if(SetConsoleOutputCP(1251)==0)

{

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

}

int k; // количество строк треугольника

do

{

Cout << "Задайте число строк >0 и <=17 --> ";

/* при k > 17 треугольник не уместится на экране */

Cin >> k;

} while (k<1 || k>17);

int y = 3;

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

char str[81], tmp[11];

// строка для вывода на экран и строка для хранения числа

for (int n=0; n < k; n++) // идем по строкам треугольника Паскаля

{

str[0] = '\0';

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

// вычисляем коэффициенты в одной строке

{

itoa(C(m,n), tmp, 10);

// делаем из коэффициента строку tmp

strcat(str, tmp);

// добавляем строку tmp в строку str

strcat(str, " "); // разделяем числа пробелами

}

int x = 41-strlen(str)/2; /* определяем, с какой позиции в строке экрана должна начинаться выводимая строка треугольника Паскаля */

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

cout<<" ";

cout << str << endl; /* выводим строку с заданной позиции (строка центрирована по горизонтали) */

y++; // переходим к следующей строке экрана

}

_getch();

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]