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

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

Восстановить пароль Регистрация
 
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
07.04.2012, 15:57     удалить повторяющиеся фамилии #1
Здравствуйте, многоуважаемые умы.. Передо мной стояла задача такая: "Сведения о выдаче экземпляра журнала состоят из названия журнала, номера журнала, фамилии читателя. Написать программу для занесения в массив информации о 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");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 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;
        }
  }
kristina-lonsh
0 / 0 / 0
Регистрация: 04.03.2012
Сообщений: 61
07.04.2012, 16:10  [ТС]     удалить повторяющиеся фамилии #3
Цитата Сообщение от zss Посмотреть сообщение
Можно ввести признак того, что читатель уже выводился
Блин, вот идея была с логической переменной, а как реализовать так и не дошло.. Всегда поражаюсь умным людям - всё так быстро и просто... Спасибо! Однако, если активных читателя окажется 2 (допустим, Иванов и Петров были в библиотеке по 3 раза каждый, тогда они оба будут активные), то он выводит только одного и останавливается, так как логическая переменная намертво приняла значение "true"..
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
07.04.2012, 20:23     удалить повторяющиеся фамилии #4
Продолжите идею, заведите массив выведенных,
если в этом массиве читатель есть, то не выводить.
Yandex
Объявления
07.04.2012, 20:23     удалить повторяющиеся фамилии
Ответ Создать тему
Опции темы

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