1

Тема: Пошук в структурах с++

Доброго дня..) Допоможіть закінчити задачу....
Є інформація про N членів спортивної секції: прізвище, вік, зріст. Ввести інформацію про кожного. Надрукувати прізвище найвищого. Надрукувати інформацію про тих, чий вік нижче середнього, а зріст вище середнього по секції.
Не можу виконати цю умову..."Надрукувати інформацію про тих, чий вік нижче середнього, а зріст вище середнього по секції." Наведіть будь ласка хоч приклад про зріст...як правильно порівнювати... *WALL*
Ось мій код...

#include <stdio.h> 
#include <conio.h> 
#include <locale.h>
#define n 3
void main() {  
    setlocale(0,"");
    int i,p,f=0,men,max,ser1,m=0,ser2; 
    struct 
    {    char fio[20];                    
    int years; 
    int hight;
    } 
    aks[n];      
    for(i=0;i<n;i++) 
     { 
printf("\nВведiть прiзвище:");        
scanf("%s",&aks[i].fio);              
printf("Введiть вiк:");        
scanf("%d",&aks[i].years); 
printf("\nВведiть зрiст:");      
scanf("%d",&aks[i].hight); 
    }

    for(i=0;i<n;i++) 
    {  
          printf("\n%13s\t %3i\t %3icm ", 
            aks[i].fio,aks[i].years,aks[i].hight); 
       }
    max=aks[0].hight;
    for(i=0;i<n;i++) 
    {  
        if(aks[i].hight>max)
        {
            p=i;
            max=aks[i].hight;
        }
    }
    printf("\nПрiзвище найвищого:%s\n",aks[p].fio);





     _getch(); 
}

2

Re: Пошук в структурах с++

Там опущене речення "знайти середній зріст і середній вік" - оскільки їх треба не виводити, а використати для вашого завдання.
Так, середнє кількох величин дорівнює сумі цих величин, поділеній на їхню кількість.

3 Востаннє редагувалося sn7770666k (01.06.2016 19:27:01)

Re: Пошук в структурах с++

koala написав:

Там опущене речення "знайти середній зріст і середній вік" - оскільки їх треба не виводити, а використати для вашого завдання.
Так, середнє кількох величин дорівнює сумі цих величин, поділеній на їхню кількість.

я написав так..але воно не працює...

for(i=0;i<n;i++) 
    {
m+=aks[i].years;
ser1=m/n;
if(aks[i].years<ser1){
         printf("\n%13s\t %3i\t %3icm ", 
            aks[i].fio,aks[i].years,aks[i].hight);  
    }
}

що тут не так..?

4

Re: Пошук в структурах с++

Увімкніть комп'ютер і запустіть компілятор. Коли запрацює - напишіть сюди, що саме вивелося і чим вас це не влаштовує. І в майбутньому саме так і робіть замість писати, що "не працює".

Подякували: leofun011

5

Re: Пошук в структурах с++

я запускав це в VisualBasic12...виводить все окрім цього блоку...

for(i=0;i<n;i++) 
    {
m+=aks[i].years;
ser1=m/n;
if(aks[i].years<ser1){
         printf("\n%13s\t %3i\t %3icm ", 
            aks[i].fio,aks[i].years,aks[i].hight);  
    }
}

6 Востаннє редагувалося sn7770666k (01.06.2016 19:37:33)

Re: Пошук в структурах с++

Введiть прiзвище:vovk
Введiть вiк:12

Введiть зрiст:167

Введiть прiзвище:medvid
Введiть вiк:17

Введiть зрiст:189

Введiть прiзвище:boss
Введiть вiк:29

Введiть зрiст:177

         vovk     12     167cm
       medvid     17     189cm
         boss     29     177cm
Прiзвище найвищого:medvid

(m=58
ser1=19) це я просто вивів середнє..

7

Re: Пошук в структурах с++

У мене таке враження, що вам хтось дав пару прикладів, але не пояснив, як вони працюють, і ви зараз намагаєтеся хаотично змішати рядки з цих прикладів в надії, що воно запрацює "як треба". Звісно, це може бути помилкове враження, але поки що воно саме таке.
Давайте я вам підкажу. Додайте у ваш блок вивід ще декількох змінних:

for(i=0;i<n;i++) 
    {
printf("Початок циклу, i=%d ", i);
m+=aks[i].years;
printf("m=%d ", m);
ser1=m/n;
printf("ser1=%d ", ser1);
printf("%d %s %d\n", aks[i].years, (aks[i].years<ser1?"менше за":"не менше за") , ser1);
if(aks[i].years<ser1){
         printf("\n%13s\t %3i\t %3icm ", 
            aks[i].fio,aks[i].years,aks[i].hight);  
    }
printf("ser1=%d\n", ser1);
}

і, якщо ще не зрозумієте, скопіюйте результат сюди.

Подякували: leofun011

8

Re: Пошук в структурах с++

koala написав:

У мене таке враження, що вам хтось дав пару прикладів, але не пояснив, як вони працюють, і ви зараз намагаєтеся хаотично змішати рядки з цих прикладів в надії, що воно запрацює "як треба". Звісно, це може бути помилкове враження, але поки що воно саме таке.
Давайте я вам підкажу. Додайте у ваш блок вивід ще декількох змінних:

for(i=0;i<n;i++) 
    {
printf("Початок циклу, i=%d ", i);
m+=aks[i].years;
printf("m=%d ", m);
ser1=m/n;
printf("ser1=%d ", ser1);
printf("%d %s %d\n", aks[i].years, (aks[i].years<ser1?"менше за":"не менше за") , ser1);
if(aks[i].years<ser1){
         printf("\n%13s\t %3i\t %3icm ", 
            aks[i].fio,aks[i].years,aks[i].hight);  
    }
printf("ser1=%d\n", ser1);
}

і, якщо ще не зрозумієте, скопіюйте результат сюди.

Ось результат...
Введiть прiзвище:vovk
Введiть вiк:12

Введiть зрiст:167

Введiть прiзвище:medvid
Введiть вiк:17

Введiть зрiст:189

Введiть прiзвище:boss
Введiть вiк:29

Введiть зрiст:177

         vovk     12     167cm
       medvid     17     189cm
         boss     29     177cm
Прiзвище найвищого:medvid
Початок циклу, i=0 m=12 ser1=4 12 не менше за 4
ser1=4
Початок циклу, i=1 m=29 ser1=9 17 не менше за 9
ser1=9
Початок циклу, i=2 m=58 ser1=19 29 не менше за 19
ser1=19

9

Re: Пошук в структурах с++

Так чому дорівнює середнє?

10 Востаннє редагувалося sn7770666k (01.06.2016 20:06:20)

Re: Пошук в структурах с++

чому воно не виводить цього?

if(aks[i].years<ser1){
         printf("\n%13s\t %3i\t %3icm ", 
            aks[i].fio,aks[i].years,aks[i].hight);  
    }

середнє я і у своєму прикладі виводив.."19"

11

Re: Пошук в структурах с++

Але порівнюєте ви з 19 тільки в останній ітерації, до того ви порівнюєте з 4 і 9.

12

Re: Пошук в структурах с++

koala написав:

Але порівнюєте ви з 19 тільки в останній ітерації, до того ви порівнюєте з 4 і 9.

вже зрозумів....блін просто ж треба було в іншому циклі вирахувати середнє... *WALL*  *WALL*
дуже дякую..) *DRINK*

Подякували: koala1

13

Re: Пошук в структурах с++

А ще:
- вирівняйте код;
- дайте змінним зрозуміліші назви;
- середнє зробіть float чи double, бо середнє там насправді (12+17+29)/3=19.333333, а ви ризикуєте підхопити зайві значення (чи пропустити потрібні).

Подякували: leofun011

14

Re: Пошук в структурах с++

koala написав:

А ще:
- вирівняйте код;
- дайте змінним зрозуміліші назви;
- середнє зробіть float чи double, бо середнє там насправді (12+17+29)/3=19.333333, а ви ризикуєте підхопити зайві значення (чи пропустити потрібні).

добре..) *THUMBSUP*