/*
Дан линейный массив целых чисел. Установить, все ли элементы этого
массива различны. Выписать из линейного массива различные числа по
одному разу. (Ввод/вывод осуществляется через соответствующие файлы
in.txt/out.txt)
*/
#include <stdio.h>
const char szInName[] = "in.txt";
const char szOutName[] = "out.txt";
const int iMaxCount = 100;
int main()
{
// открываем файл
FILE* f = fopen( szInName,"rt" );
if( !f ) {
printf( "Ошибка при открытии файла "%s"\n", szInName );
return 1;
}
int a[iMaxCount];
int count = 0; // кол-во элементов в массиве
// читаем целые числа из файла до тех пор, пока не заполнен массив
// и не достигнут конец файла или не встретился недопустимый символ
// (в обоих случаях fscanf() вернет значение, отличное от 1, а именно, EOF или 0)
while( count < iMaxCount && fscanf( f, "%d", a+count ) == 1 )
++count;
fclose( f ); // закрываем исходный файл
if( !count ) {
printf( "Нет данных.\n" );
return 2;
}
// создаем результирующий файл
f = fopen( szOutName,"wt" );
if( !f ) {
printf( "Ошибка при создании файла "%s"\n", szOutName );
return 3;
}
fprintf( f, "%d ", a[0] ); // Первый элемент
bool bRepeated = false; // повторяющихся элементов в массиве пока нет
// каждый элемент массива, начиная со второго, сравниваем со всеми предыдущими
for( int i = 1; i < count; ++i ) {
bool bMatch = false; // текущий элемент пока не совпал ни с одним из предыдущих
int ai = a[i];
for( int j = 0; j < i; ++ j ) // сравниваем с предыдущими элементами
if( a[j] == ai ) {
bMatch = true; // совпадение
break; // дальше можно не продолжать
}
if( bMatch ) // в массиве есть повторяющиеся элементы
bRepeated = true;
else // элемент встретился первый раз
fprintf( f, "%d ", ai );
}
fprintf( f,
bRepeated ? "\nВ массиве есть повторяющиеся элементы.\n"
: "\nВсе элементы массива различны.\n" );
fclose( f ); // закрываем результирующий файл
return 0;
}
1 2 3 4 5 6
12 13 14 29845 0930 20 848 58 9028 0 183
-23 -223 -89 284 902 17
20 183 -852 15
#include <locale>
#include <iostream>
#include <fstream>
#include <stdexcept>
#include <vector>
#include <iterator>
#include <algorithm>
#include <conio.h>
using namespace std;
// Входной и выходной файлы. Укажите правильный путь для себя
const char* const IN_FILE = "./in.txt";
const char* const OUT_FILE = "./out.txt";
// Тип целые числа
typedef int data_t;
typedef vector<data_t> data_vec_t;
data_vec_t data;
// Читает файл и возвращает true если нет одинаковых
bool readFile()
{
// Открываем файл
ifstream in(IN_FILE);
if (in)
{
bool result = true;
insert_iterator<data_vec_t> ins = inserter<data_vec_t > (data, data.begin());
data_t value;
in >> value;
// Пока не конец файла
while (!in.eof())
{
// Если ошибка - исключение
if (in.fail())
{
throw runtime_error("Во входном файле встретились не верные данные.");
}
// Если нет таких
if (find(data.begin(), data.end(), value) == data.end())
{
// То добавим
ins = value;
}
else
{
result = false;
}
in >> value;
}
return result;
}
else
{
throw runtime_error("Не могу открыть входной файл.");
}
}
// Чисто для вывода в файл и на stdout
// Чтоб не писать каждый раз:
// out<<"бла-бла-бла"; cout<<"бла-бла-бла";
// Ленивый я
class out_helper
{
public:
out_helper(const char* const fileName = OUT_FILE)
{
out.open(fileName, ios_base::out | ios_base::trunc);
if (!out)
{
throw runtime_error("Не могу открыть файл для вывода.");
}
out.imbue(locale("C"));
}
template<class T>
out_helper & operator<<(const T& right)
{
out << right;
cout << right;
return *this;
}
private:
ofstream out;
out_helper(const out_helper&);
out_helper& operator=(const out_helper&);
};
int main()
{
locale::global(locale(""));
try
{
out_helper out;
out << "В файле " << (readFile() ? "нет повторяющихся элементов" : "есть повторяющиеся элементы") << "\n"
<< "Не повторяющиеся элементы:\n";
for (data_vec_t::const_iterator it = data.begin(), end = data.end(); it != end; ++it)
{
out << *it << " \t";
}
out << "\n";
}
catch (exception& ex)
{
cerr << ex.what() << endl;
}
_getch();
return 0;
}
23 12 324 45 33333354 123 23
В файле есть повторяющиеся элементы
Не повторяющиеся элементы:
23 12 324 45 33333354 123
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.