Страница 1 из 1

встречаемость символов

Добавлено: 06 мар 2010, 21:52
Евгений Александрович
Проблема с выводов информации о встречаемости символов ( а точнее оценок , как в моем случае):

Код: Выделить всё

struct my{
char fio[40];
int numer;
char date1[40];
char date2[40];
int mark1;
int mark2;
};
int n,j; 
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(struct my *p)
{
	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",&p[a].date1);
	printf("enter the mark:\n");
	scanf("%i",&p[a].mark1);
	printf("\n");
	printf("vvedite list2:\n");
	printf("enter the date:\n");
	scanf("%s",&p[a].date2);
	printf("enter the mark:\n");
	scanf("%i",&p[a].mark2);
}
printf("SPISOK 1:\n");
printf("# fio        nmber      date         mark\n");
printf("___________________________________________________\n");
for(a=0;a<n;a++){
		printf("%i %6s %8i %10s %12i",a,list1[a].fio,list1[a].numer,p[a].date1,p[a].mark1);
		printf("\n");}
	printf("\nSPISOK 2:\n");
printf("# fio        nmber      date         mark\n");
printf("___________________________________________________\n");
	for(a=0;a<n;a++){
printf("%i %6s  %8i %10s %12i\n",a,list2[a].fio,list2[a].numer,p[a].date2,p[a].mark2);

	}		
	for(a=0;a<n;a++){
char arr[256];
	int i,j;
	for(i=0;i<256;i++)
		arr[i]=0;
	fflush(stdin);
	j=0;
	while(list1[a].mark1){
			arr[list1[a].mark1]++;}
	for(i=0;i<256;i++)
	if(arr[i])
		printf("\n symbol '%c' vstrech %d raza",i,arr[i]); 
			} 

}

void main(){
	struct my *p;
	p=(struct my *)malloc(30*sizeof(my));
	if(p==NULL) exit(1);
	enter(p);	
	getch();
	free(p);
}

Re: встречаемость символов

Добавлено: 08 мар 2010, 02:59
Romeo
Это бесконечный цикл:

Код: Выделить всё

while(list1[a].mark1){
   arr[list1[a].mark1]++;}
Цикл выполняется до тех пор, пока list1[a].mark1 не станет равным нулю, но нулю он не станет равным никогда, так как внутри цикла значение этого выражение не меняется.

Re: встречаемость символов

Добавлено: 08 мар 2010, 16:32
Евгений Александрович
Убрал этот бесконечный цикл. Но почему при выводе результата подсчета не отображается символ(т.е. вроде считает но не показвает какой именно символ она подсчитала):

Код: Выделить всё

	for(a=0;a<n;a++){
char arr[256];
	int i;
	for(i=0;i<256;i++)
		arr[i]=0;
	
			arr[list1[a].mark1]++;
	for(i=0;i<256;i++)
	if(arr[i])
		printf("\n symbol %c vstrech %d raza",i,arr[i]); 
			} 

Re: встречаемость символов

Добавлено: 09 мар 2010, 14:27
Romeo
Ты в цикле по a каждый раз затираешь весь массив arr. Естественно у тебя ничего не считается. Вынеси зануление arr наружу, за пределы цикла по a.

Re: встречаемость символов

Добавлено: 09 мар 2010, 20:20
Евгений Александрович
При вынесени обнуления массива получается вроде-как ерунда, но вот код который считает , но поштучно( т.е если я ,к примеру, введу 2-ум студентам одинаковые оценки ,скажем по 7 балов, выдаст: 7 встр.1 раз \н 7 встр. 1 раз)
А нужно 7 встр 2 раза. Как это сделать?

char arr[256];
for(a=0;a<n;a++){

for(i=0;i<256;i++)
arr=0;
arr[p[a].mark1]++;
for(i=0;i<256;i++)

if(arr) printf("\n symbol %i vstrech %i raza",i,arr);
}