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

 

Задача: Пользователь вводит в программу через консоль последовательность целых чисел произвольной длины, заканчивая ввод нажатием комбинации клавиш Ctrl+Z. По окончании ввода вывести введенную последовательность, предварительно удалив все повторяющиеся значения. Порядок выводимых чисел должен соответствовать изначальному порядку ввода.

 

Решение на основе векторов:

 

#include "integer_vector.hpp"

 

// Функция, удаляющая из вектора повторяющиеся значения

voidIntegerVectorPurge ( IntegerVector & _v )

{

// Выбираем очередное число из последовательности

intp = 0;

while( p < _v.m_nUsed )

{

// Сравниваем его с каждым последующим числом и удаляем повторы

intq = p + 1;

while( q < _v.m_nUsed )

{

// Если числа равны между собой, удаляем второе

if( _v.m_pData[ p ] == _v.m_pData[ q ] )

IntegerVectorDeleteAt( _v, q );

 

Else

++q;

}

++p;

}

}

 

// Главная функция

intmain ()

{

// Создаем и инициализируем вектор

IntegerVector v;

IntegerVectorInit( v );

 

// Считываем входную последовательность в вектор до нажатия Ctrl+Z

IntegerVectorRead( v, std::cin );

 

// Удаляем повторяюшиеся элементы

IntegerVectorPurge( v );

 

// Печатаем итоговое содержимое вектора на экране

IntegerVectorPrint( v, std::cout );

std::cout << std::endl;

 

// Уничтожаем внутреннее содержимое вектора

IntegerVectorDestroy( v );

}

 

Решение на основе связных списков:

 

#include "integer_list.hpp"

 

// Функция, удаляющая из списка повторяющиеся значения

voidIntegerListPurge ( IntegerList & _l )

{

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

IntegerList::Node * p = _l.m_pFirst;

while( p )

{

// Сравниваем его значение с каждым последующим узлом и удаляем повторы.

// Одновременно, поддерживаем переменную, указывающую на предыдущий элемент.

IntegerList::Node * q = p->m_pNext;

IntegerList::Node * prevQ = p;

 

while( q )

{

// Если числа равны между собой, удаляем узел со вторым

if( p->m_value == q->m_value )

{

IntegerListDeleteAfter( _l, prevQ );

q = prevQ->m_pNext;

}

Else

{

prevQ = q;

q = q->m_pNext;

}

}

 

p = p->m_pNext;

}

}

 

// Главная функция

intmain ()

{

// Создаем и инициализируем список

IntegerList l;

IntegerListInit( l );

 

// Считываем входную последовательность в список до нажатия Ctrl+Z

IntegerListRead( l, std::cin );

 

// Удаляем повторяюшиеся элементы

IntegerListPurge( l );

 

// Печатаем итоговое содержимое списка на экране

IntegerListPrint( l, std::cout );

std::cout << std::endl;

 

// Уничтожаем внутреннее содержимое списка

IntegerListDestroy( l );

}

 

Ниже приведен результат выполнения этих программ - он одинаковый при одинаковом вводе:

 

 

 








Дата добавления: 2016-01-29; просмотров: 727;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.