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

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

Войти
Регистрация
Восстановить пароль
 
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
#1

удалить повторяющиеся фамилии - C++

07.04.2012, 15:57. Просмотров 401. Ответов 3
Метки нет (Все метки)

Здравствуйте, многоуважаемые умы.. Передо мной стояла задача такая: "Сведения о выдаче экземпляра журнала состоят из названия журнала, номера журнала, фамилии читателя. Написать программу для занесения в массив информации о N таких сведениях. По заданному названию журнала найти выдававшиеся номера и фамилии бравших их читателей. Найти самого активного читателя"

Моя программа выполняет всё, но недочет в том, что самого активного читателя она выводит ровно столько раз, сколько он встречался в сведениях.. Мне надо, чтобы фамилию активного читателя (или читатеЛЕЙ, если таковых оказалось несколько) он выводил строго только по одному разу... не получается чет =( Код программы ниже:

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
#include<stdlib.h>
#include<iostream>
#include<iomanip.h>
using namespace std;
 
struct libr
{
char journal[10];
int nomer;
char family[10];
};
 
 
int main()
{int i,j,N;
char poisk[10];
cout<<"Vvedite kolichestvo svedeniy--> "; cin>>N;
struct libr A[N];
cout<<"Vvedite nazvanie zhurnala, nomer zhurnala i familiyu chitatelya cherez =PROBEL= "<<endl;
for (i=0;i<N;i++)  
    {cout<<"Chitatel' В№"<<i+1<<endl;
    cin>>A[i].journal>>A[i].nomer>>A[i].family;
    cout<<endl;
    }
cout<<endl<<"Vvedite nazvanie iskomogo zhurnala--> "; cin>>poisk;
cout<<setw(10)<<"Familiya"<<setw(10)<<"Nomer"<<endl;
for (i=0;i<N;i++)  
    {if (strcmp(A[i].journal,poisk)==0) cout<<setw(10)<<A[i].family<<setw(10)<<A[i].nomer<<endl;
    }
int schet[N];
 
for (i=0;i<N;i++)  
    {schet[i]=0;
    for (j=0;j<N;j++)
         {if (strcmp(A[i].family,A[j].family)==0) schet[i]++;
         }
    }
int max=0;
for (i=0;i<N;i++) if (schet[i]>max) max=schet[i];
cout<<"Samye aktivnye chitateli: "<<endl;
for (i=0;i<N;i++) 
    {if (schet[i]==max) cout<<A[i].family<<endl;
    }
system("PAUSE");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2012, 15:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос удалить повторяющиеся фамилии (C++):

С++ Удалить повторяющиеся строки - C++
Задача: Задан файл с записями вида: • фамилия; • имя. Создать файл с записями такого же вида, исключив из него повторяющиеся записи...

Удалить повторяющиеся слова - C++
ребятки помогите пожлста! не успела сделать вовремя (проболела после сессии долго). читать книжки пробовала, гуглила инет, но под мое...

Удалить повторяющиеся слова - C++
char mas; char let; cout &lt;&lt; &quot;Введите строку: &quot;; gets(mas); cout &lt;&lt; endl; cout &lt;&lt; &quot;Введите подстроку: &quot;;...

Удалить из массива повторяющиеся элементы - C++
Удалить из массива повторяющиеся элементы.жду вашим решений

Удалить повторяющиеся слова в строке - C++
Здравствуйте! Как удалить из строки типа char, введенной с помощью cin.getline(buf, 80), одинаковые слова (слова могут быть разделены...

Удалить повторяющиеся элементы списка - C++
Есть список в виде класса. Нужно удалить повторяющиеся элементы, вернее, чтобы каждого было по одному. (например, вводится 1 2 3 3 4 4, а...

3
zss
Модератор
Эксперт С++
6589 / 6151 / 2026
Регистрация: 18.12.2011
Сообщений: 16,041
Завершенные тесты: 1
07.04.2012, 16:05 #2
Можно ввести признак того, что читатель уже выводился
C++
1
2
3
4
5
6
7
8
9
bool pi=false;
for (i=0;i<N;i++) 
 {
        if (schet[i]==max && !pi)
        {
                cout<<A[i].family<<endl;
               pi=true;
        }
  }
0
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
07.04.2012, 16:10  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
Можно ввести признак того, что читатель уже выводился
Блин, вот идея была с логической переменной, а как реализовать так и не дошло.. Всегда поражаюсь умным людям - всё так быстро и просто... Спасибо! Однако, если активных читателя окажется 2 (допустим, Иванов и Петров были в библиотеке по 3 раза каждый, тогда они оба будут активные), то он выводит только одного и останавливается, так как логическая переменная намертво приняла значение "true"..
0
zss
Модератор
Эксперт С++
6589 / 6151 / 2026
Регистрация: 18.12.2011
Сообщений: 16,041
Завершенные тесты: 1
07.04.2012, 20:23 #4
Продолжите идею, заведите массив выведенных,
если в этом массиве читатель есть, то не выводить.
0
07.04.2012, 20:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2012, 20:23
Привет! Вот еще темы с ответами:

Удалить повторяющиеся буквы в слове - C++
Удалить повторяющиеся буквы в слове. Кто может помочь?

Удалить повторяющиеся символы в массиве - C++
Доброго времени суток форумчане! у меня такая задачка: нужно найти и удалить все повторяющиеся элементы в массиве... я выбрал...

Удалить повторяющиеся объекты в векторе - C++
Есть 2 вектора. Копируем один вектор во второй. Потом во втором нужно удалить все объекты, в которых присутствуют одинаковые поля...

Удалить повторяющиеся символы из списка - C++
Удалить повторяющиеся символы из списка.с помощью двусвязного списка


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

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

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