Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив структур. 
:(
    Опции темы
resu
Дата 29.12.2009, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



Доброй ночи. 

Столкнулся с такой проблемой:

Есть массив структур с такими полями: Имя, Фамилия, Партия (Данные голосовавшего и партия, за которую он отдал голос).

К примеру:

Тарас Лопухов ЕдРос
Иван Прошкин ЛДПР
Петр Иванов Яблоко
Илья Панов ЛДПР
Василий Увалов ЛДПР

Вывод:

Максимально часто встречающаяся (выигравшая) партия: ЛДПР. не дай Бог

Ниже приведен код, который находит тО, что нужно. Но в нем не рассматривается вариант, если 2 или больше партий набрали одинаково максимальное кол-во голосов.
И еще. Я не уверен в правильности алгоритма этого кода. Скорее всего, есть лучший вариант.

Код

for(i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(strcmp(a[i].politicalParty,a[j].politicalParty)==0)
                schet++;
        }
        sch[i] = schet;
        schet = 0;
    }

    max = sch[0];
    for(i=0;i<n;i++){
        if(sch[i]>sch[0])
        max = sch[i];
    }
    cout<<"Winer:"<<a[max].politicalParty<<"\n";


Заранее спасибо.

Это сообщение отредактировал(а) resu - 29.12.2009, 02:25
PM MAIL   Вверх
fry
Дата 29.12.2009, 02:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Довольно странно реализованный алгоритм.

Почитай про std::map, на нем легче его реализовать. Пример в книге Страуструпа по одноименному контейнеру.

Код

max = sch[0];
    for(i=0;i<n;i++){
        if(sch[i]>sch[0])
        max = sch[i];
    }


Мне кажется или последний блок какой то не очень логичный?
Просто max = sch[i] и, по сути, = schet, однако далее идет
a[max].politicalParty. 
Вопрос: как связанны индексы для a[] и количество голосов?

Код

for(i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(strcmp(a[i].politicalParty,a[j].politicalParty)==0)
                schet++;
        }
        sch[i] = schet;
        schet = 0;
    }


schet = 0; ИМХО логичнее (и безопаснее) смотрелся перед for(int j=i+1;j<n;j++).

Имена переменных не очень сильно показывают работу кода (читать не очень удобно). => способствует ошибкам

Цитата

Но в нем рассматривается вариант, если 2 или больше партий набрали одинаково максимальное кол-во голосов.


Лично я этого не заметил.


Это сообщение отредактировал(а) fry - 29.12.2009, 02:16
PM MAIL   Вверх
resu
Дата 29.12.2009, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



Цитата

Лично я этого не заметил.

Прошу прощения. НЕ рассматривается. Пропустил.
А мне как раз это нужно.

Алгоритм да, странный.

Цитата

Почитай про std::map

В том то и дело, что подобное использовать нельзя. 

PM MAIL   Вверх
fry
Дата 29.12.2009, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Код

max = sch[0];
    for(i=0;i<n;i++){
        if(sch[i]>sch[0])
        max = sch[i];
    }


if(sch[i]>sch[0]) - бред, думай, что нужно по смыслу это ведь обычная книжная реализация поиска максимума.

if(sch[i]>sch[0])
 max = sch[i]; - не полная реализация обработки условия, здесь надо не просто сохранять максимум, но и индекс для него, который используем в

cout<<"Winer:"<<a[ ->....<- ].politicalParty<<"\n";

Первый блок вроде ничего. (работать должен)

Цитата

А мне как раз это нужно.

Ищи второй элемент в sch с таким же значением, что и максимальное. Найдешь его - найдешь и вторую партию с таким же кол-вом балов.
PM MAIL   Вверх
resu
Дата 29.12.2009, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 29.12.2009

Репутация: нет
Всего: нет



Спасибо! Буду пробовать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.