/*
Известны рост и пол каждого из 22 человек.
Найти средний рост мужчин.
(решение должно быть оформлено через записи).
*/
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <iomanip>
using namespace std;
enum e_sex { sxMale, sxFemale }; // пол
struct t_person {
e_sex sex; // пол
int height; // рост
};
const int nCount = 22;
int main()
{
// инициализируем генератор псевдослучайных чисел
srand( time(0) );
t_person data[nCount]; // массив с данными (пол/рост)
// заполняем массив псевдослучайными данными
for( int i = 0; i < nCount; ++i ) {
data[i].sex = (e_sex)(rand() & 1);
data[i].height = 160 + rand()%30; // рост в диапазоне 160..189
}
// находим средний рост мужчин
int nMales = 0; // число мужчин
unsigned long sum = 0;
for( i = 0; i < nCount; ++i )
if( data[i].sex == sxMale ) {
++nMales;
sum += data[i].height;
}
if( !nMales )
cout << "\nНет ни одного мужчины!\n";
else // рост выводится с 4-мя значащими цифрами (1 цифра после запятой)
cout << "\nВсего мужчин: " << nMales
<< "\nСредний рост = " << setprecision(4) << (float)sum/nMales << endl;
system( "pause" );
return 0;
}
/*
Известны рост и пол каждого из 22 человек.
Найти средний рост мужчин.
Решение должно быть оформлено через записи.
Ввод/вывод необходимо осуществлять в файл
Дополнительно реализована генерация файла с данными,
если программа запущена с параметром /i или -i.
*/
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <ctype.h>
enum e_sex { sxMale, sxFemale }; // пол
struct t_person {
e_sex sex; // пол
int height; // рост
};
const int nMaxCount = 22;
const char szInName[] = "in.txt";
const char szOutName[] = "out.txt";
int main( int argc, char* argv[] )
{
t_person data[nMaxCount]; // массив для данных (пол/рост)
// если программа запущена с параметром -i или /i,
// то генерируем файл с данными
if( argc == 2 ) {
char* p = argv[1];
if( (*p == '/' || *p =='-') && _toupper( p[1] ) == 'I' ) {
// инициализируем генератор псевдослучайных чисел
srand( time(0) );
// заполняем массив псевдослучайными данными
for( int i = 0; i < nMaxCount; ++i ) {
data[i].sex = (e_sex)(rand() & 1);
data[i].height = 160 + rand()%30; // рост в диапазоне 160..189
}
// создаем и записываем файл
FILE* f = fopen( szInName, "wt" );
if( !f ) {
printf( "Ошибка при создании файла "%s"\n", szInName );
return 4;
}
static char chSex[2] = { 'M', 'F' };
for( i = 0; i < nMaxCount; ++i )
fprintf( f, "%c,%d\n", chSex[data[i].sex], data[i].height );
fclose( f );
}
}
// открываем файл
FILE* f = fopen( szInName,"rt" );
if( !f ) {
printf( "Ошибка при открытии файла "%s"\n", szInName );
return 1;
}
int count = 0; // кол-во элементов в массиве
// читаем данные (пол,рост) из файла до тех пор, пока не заполнен массив
// и не достигнут конец файла или не встретилась нераспознаваемая строка
// (в обоих случаях fscanf() вернет значение, отличное от 2)
char ch;
while( count < nMaxCount && fscanf( f, "%c , %d\n", &ch, &data[count].height ) == 2 ) {
switch( ch ) {
case 'M':
case 'm':
data[count].sex = sxMale;
break;
case 'F':
case 'f':
data[count].sex = sxFemale;
break;
default: // неверно указан пол, пропускаем строку
continue;
}
++count;
}
fclose( f ); // закрываем исходный файл
if( !count ) {
printf( "Нет данных.\n" );
return 2;
}
// находим средний рост мужчин
int nMales = 0; // число мужчин
unsigned long sum = 0;
for( int i = 0; i < nMaxCount; ++i )
if( data[i].sex == sxMale ) {
++nMales;
sum += data[i].height;
}
// создаем результирующий файл
f = fopen( szOutName,"wt" );
if( !f ) {
printf( "Ошибка при создании файла "%s"\n", szOutName );
return 3;
}
if( !nMales )
fprintf( f, "Нет ни одного мужчины!\n" );
else // рост выводится с 4-мя значащими цифрами (1 цифра после запятой)
fprintf( f,
"Всего мужчин: %d\n"
"Средний рост = %.1f\n",
nMales, (float)sum/nMales );
/*
Замечание: точность вычислений не может превышать точности измерений.
Рост измеряется и задан в файле с точностью до 1 см, поэтому следует
округлять средний рост до 1 см. Вывод результата с точностью до 0.1см
сделан только для примера!
*/
return 0;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.