• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Нужно чуть подправить программы. Массив и структура.

  • Автор темы Guest
  • Дата начала
G

Guest

1. Двумерный массив. Вводим количество спортсменов, далее вводим имя для каждого. Для каждого из них рандомно выводятся результаты (6 попыток). После ищется максимальный элемент и выводится под именем спортсмена. Так вот вопрос: рядом с каждым максимальным элементом нужно в скобочках указать номер попытки, т.е. номер элемента массива. Не могу понять как сделать. Спасибо.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Двумерный массив</div></div><div class="sp-body"><div class="sp-content">
Код:
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>
#include <stdlib.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int c[20];
char fio[20][15];
int m,res,i,j,max,result;
printf("Vvedite kol-vo sportsmenov\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
result=0;
printf("Vvedite familiy %d sportsmena\n",i+1);
scanf("%s",fio[i]);
max=0;
printf("Resultati %d sportsmena: ",i+1);
for(j=0;j<6;j++)
{
res=rand()%150+150;
printf("%d ",res);
if(res>max)
max=res;
result=max;
}
c[i]=result;
printf("\n");
getchar();
}
printf("Luchshii resultat:\n");
for(i=0;i<m;i++)
printf("%15s",fio[i]);
printf("\n");
for(i=0;i<m;i++)
printf("%15d",c[i]);
getchar();
return 0;
}
//---------------------------------------------------------------------------
2. Структура. Нужно вывести анкетные данные учеником, которые учатся на "отлично" и "хорошо", т.е. без троек. Сначало вводим имя, фамилию, дату рождения, вводим количество предметов и оценки по ним. И вот нужно вывести Фамилию и Имя ученика, который учится без троек. Так вот в чем вопрос: программа не хочет верно выводить. Помогите в чем загвостка. Спасибо.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Структура</div></div><div class="sp-body"><div class="sp-content">
Код:
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>

//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
const n=1;
struct students
{
char name[8],surname[12];
int day,month,year,pr;
int ball[4];
};
students s[10];
int i,j;
for(i=0;i<n;i++)
{
printf("Informaciya o %d studente\n",i+1);
printf("Vvedite imya\n");
scanf("%s",s[i].name);
printf("Vvedite familiy\n");
scanf("%s",s[i].surname);
printf("Data rojdeniya DD MM YYYY\n");
scanf("%d%d%d",&s[i].day,&s[i].month,&s[i].year);
printf("Vvedite kolichestvo predmetov\n");
scanf("%d",&s[i].pr);		// s[i].pr - количество предметов
getchar();
printf("Ocenki\n");
for(j=0;j<s[i].pr;j++)
{
printf("Vvedite ocenku %d predmeta\n",j+1);
scanf("%d",&s[i].ball[j]);	  // s[i].ball[j] - оценки
}
}
printf("Imya	 Familiya	 Data rojdenia	 Ocenki\n");
for(i=0;i<n;i++)
{
printf("%-8s%-12s%5d/%d/%d",s[i].name,s[i].surname,s[i].day,
s[i].month,s[i].year);
for(j=0;j<s[i].pr;j++)
printf("%5d",s[i].ball[j]);
printf("\n");
}
printf("\n");
printf("Studenti uspevaushie na 4 and 5:");
for(i=0;i>n;i++)
{
if(s[i].ball[j]>3)
printf("%-8s%-12s",s[i].name,s[i].surname);
else
printf("otsutstvuyt");
}
getchar();getchar();
return 0;
}
//---------------------------------------------------------------------------
 
L

lazybiz

Константин93, я боюсь ты не совсем правильно понял своего препода. Под словом "непонятней" он не имел в виду то что нужно удалять все пробелы и отступы и превращать код в нечитабельный набор букв.

Крутой программист будет писать свой код так, чтобы его могли прочитать другие, если конечно он пишет для кого-то а не только для себя, а как я понял ты пишешь не только для себя. Делай выводы.

P.S.: "Встречают по одежке, а провожают по уму."
 
R

Rififi

Константин93

что то мы не по теме. нужно решить задачку)

вот это я понимаю, деловой подход.

"сумма, сроки?" © o_O
 
I

IrineK

Возможно, преподаватель имел в виду создание вложенных структур, т.е.:
1) создается структура "дата рождения", которая включает: день, месяц, год;
2) создается структура "рейтинг", которая включает: количество предметов, оценки;
3) создается структура "студент", которая включает: имя, фамилию, дату рождения, рейтинг.

При объявлении это будет выглядеть так:

C++:
struct birth_date
{char	surname[m], name[m];	
};

struct rating
{int pr, ball[4];
};

struct student
{char	surname[m], name[m];
struct birth_date bd;
struct rating marks;
} st[n];
...

Вложенная структура помещается в структурный шаблон аналогично обычной переменной. Для доступа к элементу вложенной структуры нужно дважды использовать “.”. Например: st.marks.ball[j]. Эта конструкция интерпретируется слева направо.
 
G

Guest

Сегодня мне препод сказал, что это вовсе не двумерный массив(
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
C++:
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>
#include <stdlib.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int c[20];
int try_out[20];
char fio[20][15];
int m,res,i,j,max,result,try_num;
printf("Vvedite kol-vo sportsmenov\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("Vvedite familiy %d sportsmena\n",i+1);
scanf("%s",fio[i]);
max=0;
printf("Resultati %d sportsmena: ",i+1);
for(j=0;j<6;j++)
{
res=rand()%150+150;
printf("%d ",res);
if(res>max)
{max=res;
try_num=j+1;
}
}
c[i]=max;
try_out[i]=try_num;
printf("\n");
getchar();
}
printf("FIO			  Luchshii resultat Nomer popytki\n");
for(i=0;i<m;i++)
{printf("%15s",fio[i]);
printf("%15d",c[i]);
printf("%15d",try_out[i]);
printf("\n");
}

getchar();
return 0;
}
//---------------------------------------------------------------------------
Снова требуется ваша помощь, нужно это переделать в двумерный массив. Программа то работает, но это не двумерный массив, а нужен именно он(
 
I

IrineK

C++:
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//---------------------------------------------------------------------------

int main(int argc, char* argv[])
{
int max[20][2];// в каждой строке - лучший результат и номер попытки
int try_out[20][6]; //для каждого спортсмена - строка из 6 попыток
char fio[20][15];
int m,i,j;
srand ( time(NULL) );
printf("Vvedite kol-vo sportsmenov\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("Vvedite familiy %d sportsmena\n",i+1);
scanf("%s",fio[i]);
max[i][0]=0;
printf("Resultati %d sportsmena: ",i+1);
for(j=0;j<6;j++)
{
try_out[i][j]=rand()%150+150;
printf("%d ",try_out[i][j]);
if(try_out[i][j]>max[i][0])
{max[i][0]=try_out[i][j];
max[i][1]=j+1;
}
}
printf("\n");
getchar();
}
printf("FIO\t\t\tLuchshii resultat\tNomer popytki\n");
for(i=0;i<m;i++)
{printf("%15s",fio[i]);
printf("%15d",max[i][0]);
printf("%15d",max[i][1]);
printf("\n");
}

getchar();
return 0;
}

В проге - три двумерных массива. Думаю, достаточно для зачета.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!