Форум программистов, компьютерный форум CyberForum.ru

Исключить из матрицы повторяющиеся строки - C++

Восстановить пароль Регистрация
 
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
19.02.2013, 11:19     Исключить из матрицы повторяющиеся строки #1
Можно отдельной функций, либо дописать в эту функцию:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void read( int &n, float **&mas)
{
    n=0;//количество точек в массиве
    mas=new float*[0];  //создать пустой массив
    fstream f;
    f.open ("in.txt", ios::in); //открытие файла
 
    
    while(!f.eof())     //Чтение из файла
    {  
        mas=(float**)realloc(mas,sizeof(float*)*(n+1)); //увеличить масив нв одну строку
        mas[n]=new float[2];        //создать строку в массиве
        f >>mas[n][0]>>mas[n][1];  //чтение из файла
        cout <<setw(5)<< mas[n][0]<<setw(5)<<mas[n][1]<<endl;   //вывод прочитанных значений
        n++ ;}
        f.close();  //Закрыть файл
}

Массив двумерный, но в нем всего два столбца, поэтому могут быть только mas[n][0] mas[n][1] - a mas[n][2] - уже не сущесвует
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2013, 11:19     Исключить из матрицы повторяющиеся строки
Посмотрите здесь:

Строки(исключить группу букв) C++
C++ Повторяющиеся строки матрицы.
C++ Исключить повторяющиеся элементы из списка
Исключить повторяющиеся символы, заменить их на пробелы. C++
Исключить повторяющиеся символы в строке C++
Исключить из массива все повторяющиеся элементы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
 Аватар для co6ak
403 / 496 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
19.02.2013, 12:57     Исключить из матрицы повторяющиеся строки #2
писать лень, но, на вскидку алгоритм:
1. заводишь переменную, изначально нуловую. counter
2. пробегаешь по циклу 0..n-1, сравнивая строки n и n+1. for ( int i = 0; i < n -1; ; ) - без инкремента
3. если строки совпадают - переписываешь строку n+1 на строку n+2
проверять
C++
1
if (равенство строк) { переписываешь; counter ++; }; else i++;
4. по выходу из цикла делаешь реаллок или переписываешь массив в новый, с кол-вом строк n-counter

Добавлено через 26 минут
смайлы >_<
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
19.02.2013, 14:51  [ТС]     Исключить из матрицы повторяющиеся строки #3
Вроде все сделал, а ошибка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
float read( int &n, float **&mas1)
{   int k=0, i;
    float** mas;
    n=0;//количество точек в массиве
    mas=new float*[0];  //создать пустой массив
    fstream f;
    f.open ("in.txt", ios::in); //открытие файла
 
    
    while(!f.eof())     //Чтение из файла
    {   
        mas=(float**)realloc(mas,sizeof(float*)*(n+1)); //увеличить масив нв одну строку
        mas[n]=new float[2];        //создать строку в массиве
        f >>mas[n][0]>>mas[n][1];  //чтение из файла
       // cout <<setw(5)<< mas[n][0]<<setw(5)<<mas[n][1]<<endl;   //вывод прочитанных значений
        n++ ;}
 
        f.close();  //Закрыть файл
 
         for ( i=0; i<n-1;  )
         {if (mas[n][0]==mas[n+1][0] && mas[n][1]==mas[n+1][1])
         {mas[n+1][0]=mas[n+2][0];
          mas[n+1][1]=mas[n+2][1];
          k++;}
         else i++;}
         
         mas1=(float**)realloc(mas1,sizeof(float*)*(n-k));
         for(i=0;i<n-k;i++)
        { mas1[i]=new float[2];
         mas1[i][0]=mas[i][0];
         mas1[i][1]=mas[i][1];
         cout <<setw(5)<< mas1[i][0]<<setw(5)<<mas1[i][1]<<endl;}
        
         return **mas1;
}
Добавлено через 11 минут
Верхнее сообщение не смотрите - неправильно там, вот исправил ошибки, нов се равно не работает

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
float read( int &l, float **&mas1)
{   int k=0, i, n=0;
    float** mas;
    l=0;//количество точек в массиве
    mas=new float*[0];  //создать пустой массив
    fstream f;
    f.open ("in.txt", ios::in); //открытие файла
 
    
    while(!f.eof())     //Чтение из файла
    {   
        mas=(float**)realloc(mas,sizeof(float*)*(n+1)); //увеличить масив нв одну строку
        mas[n]=new float[2];        //создать строку в массиве
        f >>mas[n][0]>>mas[n][1];  //чтение из файла
       // cout <<setw(5)<< mas[n][0]<<setw(5)<<mas[n][1]<<endl;   //вывод прочитанных значений
        n++ ;}
 
        f.close();  //Закрыть файл
 
         for ( i=0; i<n-1;  )
         {if (mas[i][0]==mas[i+1][0] && mas[i][1]==mas[i+1][1])
         {mas[i+1][0]=mas[i+2][0];
          mas[i+1][1]=mas[i+2][1];
          k++;}
         else i++;}
         
         mas1=(float**)realloc(mas1,sizeof(float*)*(n));
         for(i=0;i<n-k;i++)
        { mas1[i]=new float[2];
         mas1[i][0]=mas[i][0];
         mas1[i][1]=mas[i][1];
         cout <<setw(5)<< mas1[i][0]<<setw(5)<<mas1[i][1]<<endl;}
         l=n-k;
         return **mas1;
}
Yandex
Объявления
19.02.2013, 14:51     Исключить из матрицы повторяющиеся строки
Ответ Создать тему
Опции темы

Текущее время: 21:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru