Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2013, 23:46   #1
CppForYou
Пользователь
 
Регистрация: 08.03.2013
Сообщений: 37
По умолчанию структуры

Имеется список людей (n - человек), среди которых есть мужчины и женщины, хранятся следующие данные: фамилия, имя, пол (true - мужской, false - женский), рост.
Опишите функцию Lower(G), определяющую фамилию и имя самого высокого мужчины из списка.

я тут кое что начал, но как сделать дальше я не знаю)
Код:
#include <iostream>
#include <Windows.h>
using namespace std;

struct G //Структура 
{
    char name[35]; //Имя 
    char fam[35]; // фамилия
    int rost; // рост
    char pol; // пол
    
};

int main()
{
    G mas[100];  // массив структуры
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N;
    cout << "кол-во людей: ";
    cin >> N;
    for(int i=0; i<N; i++)
    {
        cout << endl;
        cout << "Фамилия: ";
        cin >> mas[i].fam;
        cout << "Имя: ";
        cin >> mas[i].name;
        cout << "Пол (m/w): "; 
        cin >> mas[i].pol;
        cout << "Рост: ";
        cin >> mas[i].rost;
    }
    cout << endl;
    system("cls");
    for(int i=0; i<N; i++)
        cout << "--- " << mas[i].fam << " " << mas[i].name << "-----"
        << "-----Рост "<< mas[i].rost << " см-----" << endl;
    int answer = 'm'; // m - man
    for(int i=0; i<N; i++)
    {
        if(answer == mas[i].pol)
        {
            cout << endl << "Мужчины: " << mas[i].fam << " " << mas[i].name << endl; 
        }   
    }
    
    cin.get();
}
CppForYou вне форума Ответить с цитированием
Старый 28.11.2013, 05:45   #2
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Код:
#include <iostream>
#include <Windows.h>
#include <conio.h>
using namespace std;

struct G //Структура 
{
    char name[35]; //Имя 
    char fam[35]; // фамилия
    int rost; // рост
    char pol; // пол
    
};

G lower(G mass[], int &nn)
{  
   G high_man;
   int rost =0;
   for (int i=0; i<nn;i++)
   {
	if (mass[i].pol=='m' && mass[i].rost>rost) 
	{ rost=mass[i].rost;
	high_man=mass[i];}
   }
if (rost==0) cout<< "Нет мужчин";
return high_man;
}


int main()
{
    G mas[100];  // массив структуры
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N;
    cout << "kol-vo ludei ";
    cin >> N;
    for(int i=0; i<N; i++)
    {
        cout << endl;
        cout << "F ";
        cin >> mas[i].fam;
        cout << "I ";
        cin >> mas[i].name;
        cout << "gender(m/w): "; 
        cin >> mas[i].pol;
        cout << "rost: ";
        cin >> mas[i].rost;
    }
    cout << endl;
    system("cls");
G my;   
  my=lower(mas,N);
  cout <<  my.fam << "   " <<my.rost;
    getch();
}
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 02.12.2013, 10:32   #3
CppForYou
Пользователь
 
Регистрация: 08.03.2013
Сообщений: 37
По умолчанию

спасибо большое, программа работает хорошо))) но когда я ввожу данные только женского пола, то выводит такую ошибку (см скрин) это на VS 2010
Изображения
Тип файла: jpg Безымянный.jpg (44.9 Кб, 69 просмотров)
CppForYou вне форума Ответить с цитированием
Старый 02.12.2013, 10:48   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

допишите иницилизацию переменной high_man

например, так (вариант далеко не безупречный, но компилятор, думаю, это обманет!):
Код:
G lower(G mass[], int &nn)
{  
   G high_man = mass[0];
   int rost =0;
   for (int i=0; i<nn;i++)
   {
	if (mass[i].pol=='m' && mass[i].rost>rost) 
	{ rost=mass[i].rost;
	high_man=mass[i];}
   }
  if (rost==0) cout<< "Нет мужчин";
  return high_man;
}
предложенный мнью вариант плох тем, фукнция lower не возвращает, удалось ли найти нужный рост.
поэтому, после фразы "Нет мужчин" программа выдаст фамилию и рост первой записи массива.
Кроме этого, вариант выдаст ошибку в случае, если массив пуст (nn равно нулю)!

поэтому лучше lower переписать, чтобы она возвращала НЕ запись о нужном человеке, а его ИНДЕКС в массиве.

вот так, например:
Код:
struct G //Структура 
{
    char name[35]; //Имя 
    char fam[35]; // фамилия
    int rost; // рост
    char pol; // пол
    
};

int lower(G mass[], int &nn)
{  
   int high_man_index = -1;
   int rost =0;
   for (int i=0; i<nn;i++)
   {
	if (mass[i].pol=='m' && mass[i].rost>rost) 
	{ rost=mass[i].rost;
               high_man_index = i;}
   }
   return high_man_index;
}


....
   cout << endl;
   system("cls");
   int high_m_ind = lower(mas,N);
   if (high_m_ind < 0) cout<< "Нет мужчин";
   else 
      cout<<" highest man: " <<  my.fam << "   " <<my.rost;
   getch();
}

Последний раз редактировалось Serge_Bliznykov; 02.12.2013 в 10:58.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача структуры из программы на c# в dll на c++ и получение структуры из dll iukash Общие вопросы .NET 0 07.05.2013 16:03
Динамические структуры данных, списковые структуры (надо разобраться что делает программа) _4Alex4_ Помощь студентам 1 14.11.2012 07:39
Написание программ (древовидные структуры, структуры неспециального вида и т.д.) Green Gin Фриланс 2 27.04.2012 15:26
Управляющие структуры. Программирование алгоритмов разветвляющейся структуры. Лёнка Компоненты Delphi 1 23.04.2012 15:03
СТРУКТУРЫ Анннютик Общие вопросы C/C++ 3 19.02.2012 17:41