Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
saylor0
7 / 0 / 1
Регистрация: 08.12.2013
Сообщений: 16
#1

Удалить повторные записи из массива - C++

13.05.2014, 10:10. Просмотров 338. Ответов 11
Метки нет (Все метки)

Всем привет, нужна небольшая помощь. Необходимо удалить повторяющиеся записи имени и адреса, как это реализовать? Либо просто вывести не повторяющиеся записи. В case 8 нужно это реализовать.
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <stdio.h>
#include <io.h>
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
 
struct Faces {
               char name[40];
               char adres[40];
               double nomer;
               double date[3];
               }Stud,r, *mas;
 
int size=sizeof(Faces);
FILE *ft,*fb;
 
int main (int)
{
 
int kol,i=0,d,t,m,j;
double dat[3],x;
long len;
 
ft = fopen("ft.txt", "a+");
while(true)
{
 
puts("\n Create - 1\n View information - 2\n Add person - 3\n Lin poisk - 4\n Pryam vybor - 5\n QuickSort - 6\n Dv Poisk - 7\n Zadanie - 8\n EXIT - 0");
cin>>d;
switch(d)
{
case 8:
 
 
 
case 0:
        fclose(ft);
        return 1;
 
case 1:
        fb=fopen("fb.txt","wb");
        fclose(fb);     break;
 
case 2:
        fb=fopen("fb.txt","rb");
        t=fileno(fb);
        len=filelength(t);
        kol=len/size;
        mas=new Faces[kol];
 
   for(i=0;i<kol;i++)
                fread((mas+i),size,1,fb);
        fclose(fb);
 
   for(i=0;i<kol;i++)
        printf("%s\t %s\t %6.0lf\t   %2.0lf.%2.0lf.%4.0lf\t\n",mas[i].name, mas[i].adres, mas[i].nomer, mas[i].date[0], mas[i].date[1], mas[i].date[2]);
 
        fclose(fb);      break;
 
case 3:
        fb=fopen("fb.txt","ab");
        fflush(stdin);
        printf("\n Name - \n");
        cin>>Stud.name;
        printf(" Adress - \n");
        cin>>Stud.adres;
        printf(" Nomer - \n");
        cin>>Stud.nomer;
        printf(" Date chislo  - \n");
        cin>>Stud.date[0];
        printf(" Date mesyac - \n");
        cin>>Stud.date[1];
        printf(" Date god - \n");
        cin>>Stud.date[2];
        fwrite(&Stud, size, 1, fb);
 
fprintf(ft,"%s %s %6.0lf %2.0lf.%2.0lf.%4.0lf\n",
Stud.name, Stud.adres, Stud.nomer, Stud.date[0], Stud.date[1], Stud.date[2]);
fclose(fb);break;
 
case 4:
        printf(" Vvedite date chislo - \n");
        cin>>dat[0];
        printf(" Vvedite date mesyac - \n");
        cin>>dat[1];
        printf(" Vvedite date god - \n");
        cin>>dat[2];
 
        for(i=0;i<kol;i++)
         {
        if (
                mas[i].date[0]==dat[0] &&
                mas[i].date[1]==dat[1] &&
                mas[i].date[2]==dat[2]
        )
printf("%s\t %s\t %6.0lf\t %2.0lf.%2.0lf.%4.0lf\t\n",mas[i].name, mas[i].adres, mas[i].nomer, mas[i].date[0], mas[i].date[1], mas[i].date[2]);
}
break;
 
case 5:
for(i=0; i<kol; i++)
                {
            m = i;
            for (j=i+1;j<kol;j++)
            if (mas[j].date[2] < mas[m].date[2])
                m = j;
        r=mas[m];
        mas[m]=mas[i];
                mas[i]=r;
            
 
printf("%s\t %s\t %6.0lf\t %2.0lf.%2.0lf.%4.0lf\t\n",mas[i].name, mas[i].adres, mas[i].nomer, mas[i].date[0], mas[i].date[1], mas[i].date[2]);
}  break;
 
 
case 6:
x=mas[2].date[0];  i=0;   j=kol-1;
while (i<= j)
{
 
        while ( mas[i].date[0]<x) i++;
        while ( mas[j].date[0]>x)  j--;
        if (i<=j)
        {
                r=mas[i];
            mas[i]=mas[j];
            mas[j]=r;
                    i++;
                        j--;
        }
for(i=0; i<kol; i++)
printf("%s\t %s\t %6.0lf\t %2.0lf.%2.0lf.%4.0lf\t\n",mas[i].name, mas[i].adres, mas[i].nomer, mas[i].date[0], mas[i].date[1], mas[i].date[2]);
 }  break;
 
 
 
case 7:
int i=0, j = kol, m;
        printf(" Vvedite date chislo - \n");
        cin>>dat[0];
        printf(" Vvedite date mesyac - \n");
        cin>>dat[1];
        printf(" Vvedite date god - \n");
        cin>>dat[2];
while( i<j) {
            m = (i + j)/2;
            if (dat[0] <= mas[m].date[0] &&
                    dat[1] <= mas[m].date[1] &&
                    dat[2] <= mas[m].date[2]) j = m;
                    else  i = m+1;
}
printf("%s\t %s\t %6.0lf\t %2.0lf.%2.0lf.%4.0lf\t\n",mas[i].name, mas[i].adres, mas[i].nomer, mas[i].date[0], mas[i].date[1], mas[i].date[2]);
 
break;
 
 
 
}
}}
Добавлено через 11 часов 7 минут
Еще немного актуально!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2014, 10:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить повторные записи из массива (C++):

Удалить повторные элементы массива и кратные корни - C++
#include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;fstream&gt; #define _CRT_SECURE_NO_WARNINGS using namespace std; int main()...

Удалить из текста повторные пробелы - C++
Задача: удалить из текста повторные пробелы! подскажите как можно лучше это реализовать методами stl (обойтись без цикла, если это...

Удалить повторные вхождения слов в предложение - C++
Дан файл, содержащий текст на русском языке. В предложениях некоторые из слов записаны подряд несколько раз (предложение заканчивается...

Удалить из последовательности все повторные вхождения слов - C++
При запуске программы появляется ошибка Debug Assertion Failed. Помогите пожалуйста исправить программу, чтобы программа запускалась и...

Удалить из последовательности все повторные вхождения слов - C++
с++ строки

Удалить повторные вхождения каждого слова из строки - C++
Задана строка, состоящая из слов, разделенных одним или несколькими пробелами. Удалить повторные вхождения каждого слова.

11
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
13.05.2014, 10:49 #2
использовать vector<>
0
saylor0
7 / 0 / 1
Регистрация: 08.12.2013
Сообщений: 16
13.05.2014, 10:52  [ТС] #3
dzrkot, вектор еще не познан, нужен другой способ
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
13.05.2014, 10:55 #4
Цитата Сообщение от saylor0 Посмотреть сообщение
вектор еще не познан, нужен другой способ
как насчёт того, чтобы познать вектор?)

Добавлено через 1 минуту
как вариант можете ещё познать списки
0
Vasilii
0 / 0 / 0
Регистрация: 09.05.2014
Сообщений: 10
13.05.2014, 10:55 #5
Сайлор это ОАИП? ФСПО ИТМО?
0
saylor0
7 / 0 / 1
Регистрация: 08.12.2013
Сообщений: 16
13.05.2014, 11:10  [ТС] #6
dzrkot, со временем познается)
Сейчас надо пользоваться тем что имеем)
Хотелось бы чтобы заносило в новый массив каждый элемент если он не повторяется, не очень понятно как это реализовать

Добавлено через 36 секунд
Vasilii, это оаип)
Но не то учебное заведение
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
13.05.2014, 11:28 #7
создаёте нвоый массив, сравниваете каждый элемент с каждым в циклах
C++
1
2
3
4
for (int i=0li<size;i++)
for (int j=i+1;j<size;j++)
if (a[i]!=a[j])
//записываем в новый массив
0
saylor0
7 / 0 / 1
Регистрация: 08.12.2013
Сообщений: 16
13.05.2014, 11:32  [ТС] #8
dzrkot, так в вот этом и есть проблемка)
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
13.05.2014, 11:33 #9
Цитата Сообщение от saylor0 Посмотреть сообщение
так в вот этом и есть проблемка)
я не понимаю в чём. КОНКРЕТНО в чём?
если вы хотите чтобы за вас написали готовое работающее решение то я делать этого не буду, не такая сложная задача .....
0
saylor0
7 / 0 / 1
Регистрация: 08.12.2013
Сообщений: 16
13.05.2014, 11:38  [ТС] #10
dzrkot, как записать в новый массив?
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
13.05.2014, 12:10 #11
вероятно создать новый массив и присвоить одно другому поэлементно .....
0
saylor0
7 / 0 / 1
Регистрация: 08.12.2013
Сообщений: 16
15.05.2014, 21:23  [ТС] #12
dzrkot, что-то не выходит
0
15.05.2014, 21:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2014, 21:23
Привет! Вот еще темы с ответами:

Дана строка. Удалить из строки повторные слова. - C++
Дана строка. Группы символов, разделенные пробелами(одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами....

Удалить из массива элементы, в записи которых все цифры различны - C++
Удалить из массива элементы, в записи которых все цифры различны. (Желательно использовать вектора)

Удалить из массива все элементы, в записи которых есть заданная цифра - C++
дан одномерный массив целых чисел заполненный случайным образом числами из промежутка удалить из него все элементы в записи которых есть...

Удалить из массива все элементы,в записи которых все цифры различны. - C++
дана последовательность целых чисел. Удалить из массива все элементы,в записи которых все цифры различны. при решении задачи нужно...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.