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

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

Восстановить пароль Регистрация
 
enotik
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 147
23.05.2011, 23:46     В чем заблуждение? (структуры) #1
вообщем, программа, структура, сожержащая в себе информацию об авторах книг, их названии и тираже.
нужно вывести самого популярного автора.
выводит. Но если их несколько например Пушкин 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
т е ищу максимальный элемент тиража, и печатаю имя соответствующее этому тиражу.
далее сравниваю в цикле, если существует чей-то тираж равный максимальному - вывожу "Абсолютного автора нет"
Но выводится и самый популярный автор и слова что такого нет во всех случаях сразу. Даже когда есть популярный, или несколько популярных - выводится первый, как будто он один. Что делать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2011, 23:46     В чем заблуждение? (структуры)
Посмотрите здесь:

Вопрос. Чем отличаются структуры в С++ от классов в C++ C++
C++ Динамические структуры данных. Программа ввода в структуры и вывода информации из неё.
C++ Написал вот такой код, ввода структуры. Первая структурная переменная вводится, а вторая нет. В чем дело?
Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры) C++
Функция внутри структуры использует указатель, как поле этой структуры C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
24.05.2011, 02:48     В чем заблуждение? (структуры) #2
в коде не сильно разбирался
C
1
a[i].tiraj+=a[j].tiraj
подобных манипуляций не понял.

по-моему простым (но не супер) решением будет после определения максимума, сделать еще 1 пробежку по массиву и проверить нет ли такого максимума где ещё.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 13:09     В чем заблуждение? (структуры) #3
if (p++) должен сработать как минимум 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 первоначально занулила, а выводит все равно лидером первго из одинаковых.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.05.2011, 20:07     В чем заблуждение? (структуры) #5
Цитата Сообщение от enotik Посмотреть сообщение
p первоначально занулила
Ой, да. Туплю. Отсутствие форматирования совсем сбило...
enotik
1 / 1 / 0
Регистрация: 20.10.2010
Сообщений: 147
26.05.2011, 16:39  [ТС]     В чем заблуждение? (структуры) #6
ну так почему не работает цикл проверки на равенство максимального с октальными, подскажите, пожалууйста!!!

Добавлено через 22 часа 13 минут
все, ошибка найдена, всем спасибо)
Yandex
Объявления
26.05.2011, 16:39     В чем заблуждение? (структуры)
Ответ Создать тему
Опции темы

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