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

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

Войти
Регистрация
Восстановить пароль
 
enotik
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 147
#1

В чем заблуждение? (структуры) - C++

23.05.2011, 23:46. Просмотров 367. Ответов 5
Метки нет (Все метки)

вообщем, программа, структура, сожержащая в себе информацию об авторах книг, их названии и тираже.
нужно вывести самого популярного автора.
выводит. Но если их несколько например Пушкин 20 книг и Лермонтов 20 книг, нужно написать, что самого популярного автора нет.

привожу текст программы, ниже вопрос.
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
#include<stdio.h>
#include<string.h>
 
typedef struct {char avtor[15];
                      char naz[20];
                      int tiraj;}book;
 
 
void search(book [],int);
void search(book [], int ,char []);
int create(book [],char []);
void print(book [], int );
 
 
void main()
{book a[10];
int k;
char c[15];
k=create(a,c);
 
search(a, k, c);
print(a, k);
search(a, k);
 
}
 
void search(book a[], int k)
{int i,j,imax=0,p=0;
 
 for(i=0;i<k;i++)
     if(a[i].tiraj)
     for(j=1;j<k;j++)
     if((i!=j)&&!strcmp(a[i].avtor,a[j].avtor))
     {a[i].tiraj+=a[j].tiraj;printf("\ntir=%4d  i=%2d j=%2d",a[i].tiraj,i,j);
 
 
 
 
      a[j].tiraj=0;
       
    [B] }
     for(i=1;i<k;i++)
     if(a[imax].tiraj<a[i].tiraj)
     imax=i;
     for(i=1;i<k;i++)
     if (a[i].tiraj==a[imax].tiraj)p++;
     printf("\ncamyi popylyarnyi:\n%15s%10d",a[imax].avtor, a[imax].tiraj);
      if (p++)   printf ("\n Absolutnogo lidera vuiavit` nevozmojno\n");[/SIZE][/B]
     
             
    
}
 
void search(book a[],int k,char c[])
{int fl=0;
    for(int i=0;i<k;i++)
if(!strcmp(c,a[i].avtor))
{if(!fl)printf("\nvse knigi iskomogo avtora:");
    printf(" \n%10s%10s%6d",a[i].avtor,a[i].naz,a[i].tiraj);
fl=1;   }if(!fl)printf("\Avtor don`t exsist");
}
 
int create(book a[], char c[])
{int k;
printf("\n Enter kol-vo avtorov: ");
scanf("%d", &k);
    for(int i=0;i<k;i++)
    {flushall();
        printf("\nvvedite familiu avtora: ");
    gets(a[i].avtor);
    printf("\nvvedite nazvanie knigi: ");
    gets(a[i].naz);
    printf("\nvvedite tiraj: ");
    scanf("%d", &a[i].tiraj);
    }flushall();
printf("\nvvedite familiu iskomogo avtora: ");
gets(c);
    return k;
}
 
void print(book a[],int k)
{printf("\n\n VSE KNIGI: ");
    for(int i=0;i<k;i++)
printf("\n%15s%15s%10d",a[i].avtor,a[i].naz,a[i].tiraj);
}
некорректность - строки 41-49
т е ищу максимальный элемент тиража, и печатаю имя соответствующее этому тиражу.
далее сравниваю в цикле, если существует чей-то тираж равный максимальному - вывожу "Абсолютного автора нет"
Но выводится и самый популярный автор и слова что такого нет во всех случаях сразу. Даже когда есть популярный, или несколько популярных - выводится первый, как будто он один. Что делать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2011, 23:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос В чем заблуждение? (структуры) (C++):

Вопрос. Чем отличаются структуры в С++ от классов в C++ - C++
Приветствую. Никак не могу понять чем же все таки отличаются структуры от классов, кроме того что в структуре по умолчанию все члены...

Подскажите пожалуйста в чем ошибка?(С++,структуры,стек) - C++
Подскажите пожалуйста, в чем ошибка При считывании из файла единственной записи 5группа &quot;Anokhin Viktor petrovich 4 5 ...

Написал вот такой код, ввода структуры. Первая структурная переменная вводится, а вторая нет. В чем дело? - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;iostream&gt; using namespace std; struct TRYC ...

Помещение структуры в вектор, удаление структуры, изменение элементов структуры - C++
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Чем отличаются структуры для наследования интерфейса от структур для наследования реализаций? - C++
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу...

Структуры "Студент" и "Дата": с чем связана данная ошибка? - C++
С чем связана данная ошибка? //--------------------------------------------------------------------------- /* Составить список группы...

5
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
24.05.2011, 02:48 #2
в коде не сильно разбирался
C
1
a[i].tiraj+=a[j].tiraj
подобных манипуляций не понял.

по-моему простым (но не супер) решением будет после определения максимума, сделать еще 1 пробежку по массиву и проверить нет ли такого максимума где ещё.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 13:09 #3
if (p++) должен сработать как минимум 2 миллиарда раз подряд.)
И хватит писать быдло-код. Используй { }.
2
enotik
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 147
24.05.2011, 20:03  [ТС] #4
Цитата Сообщение от OstapBender Посмотреть сообщение
в коде не сильно разбирался
C
1
a[i].tiraj+=a[j].tiraj
подобных манипуляций не понял.

по-моему простым (но не супер) решением будет после определения максимума, сделать еще 1 пробежку по массиву и проверить нет ли такого максимума где ещё.

Да, я так и сделала, вот:

C++
1
2
3
4
5
 for(i=1;i<k;i++)
     {if (a[i].tiraj==a[imax].tiraj) p++;
        };
     
      if (!p)    printf ("\n Absolutnogo lidera vuiavit` nevozmojno\n");
и p первоначально занулила, а выводит все равно лидером первго из одинаковых.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 20:07 #5
Цитата Сообщение от enotik Посмотреть сообщение
p первоначально занулила
Ой, да. Туплю. Отсутствие форматирования совсем сбило...
1
enotik
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 147
26.05.2011, 16:39  [ТС] #6
ну так почему не работает цикл проверки на равенство максимального с октальными, подскажите, пожалууйста!!!

Добавлено через 22 часа 13 минут
все, ошибка найдена, всем спасибо)
0
26.05.2011, 16:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2011, 16:39
Привет! Вот еще темы с ответами:

Функция внутри структуры использует указатель, как поле этой структуры - C++
Коротко, есть класс A, описан в файле A_class.h ну и реализованы функции в A_class.cpp, есть файл GlobalItems.h, где хранятся глобальные...

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё. - C++
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры) - C++
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом создаю экземпляр, Subject G; ...

Вывод структуры, строка как элемент структуры - C++
Описать структуру с именем TRAIN, содержащую следующие поля: □ название пункта назначения; □ номер поезда; □ время отправления. ...


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

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

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