- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
#include <stdio.h>
#include <alloc.h>
#define PRINT_RESULT {for(cheacksum1=0,i=MaxV-1;i>=0;cheacksum1+=vect[i--]);for(j=i=cheacksum2=0;j<MaxA;i<MaxA?cheacksum2+=mass[j][i++]:(j++,i=0));printf("CHEACKSUM: %d <-> %d\n",cheacksum2,cheacksum1);}
int main(void)
{
int **mass,*vect,MaxV,MaxA,x,y,i,j,z,k,l,s,m,cheacksum1,cheacksum2;
MaxV *= MaxV = MaxA = 200;
for(i=0,vect=(int*)malloc(sizeof(int)*MaxV),mass=(int**)malloc(sizeof(int*)*MaxA);i<MaxA;mass[i++]=(int*)malloc(sizeof(int)*MaxA));
for(i=0,j=0;i<MaxA;j<MaxA?mass[i][j++]=rand()%10:(i++,j=0));
/* A */ for(y=z=j=0,i=x=MaxA-1;y<MaxA;(j>=MaxA||i>=MaxA?((x>0?x--:y++),i=x,j=y):vect[z++]=mass[i++][j++]));
PRINT_RESULT;
/* B */ for(y=x=z=j=i=0;y<MaxA;(j>=MaxA||i<0?((x<MaxA-1?x++:y++),i=x,j=y):vect[z++]=mass[i--][j++]));
PRINT_RESULT;
/* C */ for(s=z=k=0,l=1,m=x=y=MaxA%2==0?m=x=y=MaxA/2-1:MaxA/2;x<MaxA&&y<MaxA&&x>=0&&y>=0;k++<l?vect[z++]=mass[s==1?y++:s==3?y--:y][s==0?x++:s==2?x--:x]:(k=0,s++<3?(s==2?l++:0):(s=0,l++)));
PRINT_RESULT;
/* D */ for(z=x=y=k=0,s=-1,l=MaxA-1;l>=0;l>0?k++<l?vect[z++]=mass[s==0?y++:s==2?y--:y][s==1?x--:s==0||s==2?x:x++]:(k=0,s++<3?(s==2?l--:0):(s=0,l--)):(vect[z]=mass[y][x],l--));
PRINT_RESULT;
for(x=0;x<MaxA;free(mass[x++])); free(vect); free(mass);
return 0;
}
Лабораторная работа (давно было дело... не помню, окончательная версия или нет) :]
Обход матрицы и запись результата обхода в одномерный массив.
а) по правой диагонали начиная с правого верхнего
элемента
б) с левого верхнего.
с) по сперали
д) по сперали начниная с левого верхрего элемента.
guest 06.04.2009 11:54 # +5.2
д) по сперали начниная с левого верхрего элемента.[/quote]
Спираль пишется через и
guest 06.04.2009 18:00 # +1
Я копировал 1:1 ;) задание писал препод.
guest 06.04.2009 22:41 # +1
т.е. это еще говнопрепод и говноунивер? :))
guest 20.04.2009 12:43 # +1