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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2010, 23:59   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
Сообщение отчет о количестве

Вывести на экран отчет о количестве каждой оценки в 1ой и во второй группе. Как это можно провернуть кроме моего способа?

Код:
struct my{
char fio[40];
int numer;
char date[40];
int mark;
};
int n;
struct my list1[10]= { {"Vasya",433},{"zhenya",34},{"bobr",45},{"sasha",342},{"belka",4322},{"sachek",3244},{"bredly",324},{"alex",244},{"kostya",3422},{"knedlik",90}};
struct my list2[10]={ {"masha",433},{"tanya",34},{"ulya",45},{"katya",342},{"polina",4322},{"vika",3244},{"sveta",232},{"olga",23211},{"margarita",434}};
void enter(){
	int a;
printf(" skol`ko?!\n");
scanf("%i",&n);
for(a=0;a<n;a++){
	printf(" the first list\n");

	printf("enter the date:\n");
	scanf("%s",&list1[a].date);
	printf("enter the mark:\n");
	scanf("%d",&list1[a].mark);
	printf("\n");
	printf("vvedite list2:\n");

	printf("enter the date:\n");
	scanf("%s",&list2[a].date);
	printf("enter the mark:\n");
	scanf("%d",&list2[a].mark);
}

	printf("Spisok 1\n");
	for(a=0;a<n;a++){
		printf("%i %s %i %s %i",a,list1[a].fio,list1[a].numer,list1[a].date,list1[a].mark);
		printf("\n");
		printf("list nomer 2:\n");
printf("%i %s  %i %s %i\n",a,list2[a].fio,list2[a].numer,list2[a].date,list2[a].mark);
	}
	int k=0,l=0,p=0,s=0,z=0,t=0,k1=0,l1=0,p1=0,s1=0,z1=0,t1=0;
	for(a=0;a<n;a++){
		if(list1[a].mark==5) k++;
		if(list1[a].mark==4) l++;
		if(list1[a].mark==3) p++;
		if(list1[a].mark==2) s++;
		if(list1[a].mark==1) z++;
		if(list1[a].mark==0) t++;}
	for(a=0;a<n;a++){
if (list2[a].mark==1) z1++;
if (list2[a].mark==2) s1++;
if (list2[a].mark==3) p1++;
 if (list2[a].mark==4) l1++;
if(list2[a].mark==5) k1++;
if (list2[a].mark==0) t1++;
	}
printf(" the first group\n");
		printf("pyaterki:%i\nchetverki:%i\ntroyki:%i\ndvoyki:%i\nedenicy:%i\nnuli:%i\n",k,l,p,s,z,t);
		printf("the second group\n");
		printf("pyaterki:%i\nchetverki:%i\ntroyki:%i\ndvoyki:%i\nedenicy:%i\nnuli:%i\n",k1,l1,p1,s1,z1,t1);
}
void main(){
	enter();	
	getch();
}
zhenya.ya вне форума Ответить с цитированием
Старый 03.03.2010, 13:58   #2
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Для начала:
Код:
		if(list1[a].mark==5) k++;
		if(list1[a].mark==4) l++;
		if(list1[a].mark==3) p++;
		if(list1[a].mark==2) s++;
		if(list1[a].mark==1) z++;
		if(list1[a].mark==0) t++;
заменить на:

Код:
switch (list1[a].mark){
			  case 5: k++; break;
			  case 4: l++; break;
			  case 3: p++; break;
			  case 2: s++; break;
			  case 1: z++; break;
			  case 0: t++; break;
                       }
Можно это переменные(k,l,p,s,z,t) занести в структуру.
Также сделать функции подсчета оценок и вывода.

Можно также сжать все переменные в одну, но это уже битовые(напр. группами по 4 бита) операции.
Тогда код выглядел бы так:
Код:
q=0; //переменная-список

switch (list1[a].mark){
			  case 5: add(5); break;
			  case 4: add(4); break;
			  case 3: add(3); break;
			  case 2: add(2); break;
			  case 1: add(1); break;
			  case 0: add(0); break;
                       }
...
printf
	  ("pyaterki:%i\nchetverki:%i\ntroyki:%i\ndvoyki:%i\nedenicy:%i\nnuli:%i\n",
	  get(5), get(4), get(3), get(2), get(1), get(0));
P.S. 4 бита - это значения от 0 до 15. Т.е. число попаданий одной оценки не должно быть больше 15.

Последний раз редактировалось Indian; 03.03.2010 в 14:05.
Indian вне форума Ответить с цитированием
Старый 03.03.2010, 19:08   #3
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию

Огромное спасибо!!! (никогдабы не дагадался так сделать)

а если бы к меня не было ограничения (как в данном прмере до 5) ?!

Последний раз редактировалось Stilet; 04.03.2010 в 09:18.
zhenya.ya вне форума Ответить с цитированием
Старый 03.03.2010, 20:01   #4
Indian
Форумчанин
 
Регистрация: 23.02.2010
Сообщений: 107
По умолчанию

Массив))
Можно решить гораздо проще)

Код:
int q[6]={}; //0..5
...
for (a = 0; a < n; a++)
	  {
          int score=list1[a].mark;

		  q[score]++;
	  };

printf
	  ("pyaterki:%i\nchetverki:%i\ntroyki:%i\ndvoyki:%i\nedenicy:%i\nnuli:%i\n",
	  q[5], q[4], q[3], q[2], q[1], q[0]);
Потом q обнулить. и повторить для второго списка.

Последний раз редактировалось Indian; 03.03.2010 в 20:20.
Indian вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нагрузка на программу при большом количестве панелей Polotenchik Помощь студентам 3 18.02.2010 20:24
Массив записей в количестве 10 perojenko Помощь студентам 3 25.06.2009 21:53
Отчет SaMar Microsoft Office Access 3 24.09.2008 22:39
Отчет [Smarik] Помощь студентам 1 23.04.2008 20:13