эта прога транспонирует матрицу. ишет максимальные элементы в столбцах. и выводит диограмму с ними.
входной файл: ( первая строка - это размер матрицы )
12 12
4 5 5 8 5 3 5 9 4 2 5 8
6 8 4 5 7 9 8 4 2 2 5 8
4 0 7 1 1 3 1 0 5 1 5 9
8 2 9 5 0 6 2 3 9 1 2 3
5 8 9 2 4 7 2 9 7 1 4 7
5 9 7 2 0 1 6 4 9 5 9 6
4 5 5 8 5 3 5 9 4 1 7 8
6 8 4 5 7 9 8 4 2 2 6 9
1 2 3 5 5 5 5 5 5 3 1 7
8 2 9 5 0 6 2 3 9 2 9 1
5 8 9 2 4 7 2 9 7 0 0 0
5 9 7 2 0 1 6 4 9 0 0 0
Сама прога
#include <stdio.h>
#include <stdlib.h>
int countI, countJ;
int I, J, n;
int **At, *max, **arr, **graf_arr;
int ci,cj,max_arr;
int U,str,stl, F,FF, ch_vvod;
FILE *in_file;
void main (void)
{
puts("\n 1-KLABA 2-FILE;");
scanf("%i",&ch_vvod);
switch(ch_vvod)
{
case 1: {
puts("Vvod s Klabu\n");
printf("i,y:");
scanf("%i %i",&str,&stl);
break;
}
case 2: {
puts("Vvod iz faila");
if((in_file=fopen("prakt.txt","r"))==NULL)
{
puts("\nError opening file\n\n");
return 0;
}
fscanf(in_file,"%i",&str);
fscanf(in_file,"%i",&stl);
printf("\n-----------------------------------");
printf("\ni=%i, j=%i\n",str,stl);
break;
}
default: break;
}
/*-----[ Выделение памяти под исходную матрицу arr, размера str*stl ]-----*/
arr=(int **)calloc(str,sizeof(int*)); if(arr == NULL) puts("Memory allocation failed");
for( U = 0 ; U < str ; U++ ) arr[U] = (int*)calloc(stl,sizeof(int));
/*-----[ выделение памяти под транспонированную матрицу At, размером stl*str ]-----*/
At=(int **)calloc(stl,sizeof(int*)); if(At == NULL) puts("Memory allocation failed");
for( U = 0 ; U < stl ; U++ ) At[U] = (int*)calloc(str,sizeof(int));
/*-----[ выделение памяти под массив максимальных эл-тов, размером str ]-----*/
max=(int*)calloc(str,sizeof(int));
switch(ch_vvod)
{
case 1: {
for ( F = 0;F < str ; F++)
for ( FF = 0; FF < stl; FF++)
scanf("%i",&arr[F][FF]);
break;
}
case 2: {
for ( F = 0;F < str ; F++)
for ( FF = 0; FF < stl; FF++)
fscanf(in_file,"%i",&arr[F][FF]);
break;
}
}
/*-----[ нахождение максимального эл-та в строке]-----*/
for ( I = 0 ; I < str ; I++ )
{
max[I] = arr[I][0];
for ( J = 0 ; J < stl ; J++ )
if ( max[I] < arr[I][J+1] ) max[I] = arr[I][J+1];
}
printf("-----------------------------------\n");
/*-----[Вывод исходной матрицы ]-----*/
for ( countI = 0;countI < str ; countI++)
{
printf("\n");
for ( countJ = 0; countJ < stl; countJ++)
printf("%i ", arr[countI][countJ]);
}
printf("\n-----------------------------------\n\n");
/*-----[ транспонирование матрицы]-----*/
for ( countI = 0;countI < str ; countI++)
for ( countJ = 0; countJ < stl; countJ++)
At[countI][countJ] = arr[countI][countJ];
/*-----[ Вывод транспонированной матрицы ]-----*/
for ( countI = 0;countI < stl ; countI++)
{
printf("\n");
for ( countJ = 0; countJ < str; countJ++)
printf("%i ", At[countJ][countI]);
}
printf("\n-----------------------------------\n\n");
for ( I = 0 ; I < str ; I++ )
{
max_arr = 0;
if ( max_arr < max[I] ) max_arr = max[I];
}
printf("\n\nmax_arr = %i\n",max_arr);
ci = str;
cj = max_arr;
graf_arr=(int **)calloc(cj,sizeof(int*)); if(arr == NULL) puts("Memory allocation failed");
for( U = 0 ; U < cj ; U++ ) graf_arr[U] = (int*)calloc(ci,sizeof(int));
for( I = 0 ; I < ci ; I++ )
printf("\nmax[%i] = %i\t",I,max[I]);
printf("\n\nci=%i\ncj=%i",ci,cj);
getchar();
getchar();
for( I = 0 ; I < ci ; I++ )
{
printf("\n");
for ( J = 0; J < max[I]; J++ )
graf_arr[J][I] = '*';
for ( J = max[I]; J < max_arr ; J++ )
graf_arr[J][I] = '\x20';
}
getchar();
getchar();
for( I = cj-1 ; I > -1; I-- )
{
printf("\n");
for ( J = 0; J < ci; J++ )
printf("%c",graf_arr[I][J]);
}
getchar();
getchar();
}
Помогите пожалуста. программа ведет себя нормально при размере входной матрицы до 8х8. дальше проблемы с построением диограммы. а если взять матрицу 12х12 ( которую, я тут и привел ) то начинает неправильно считать максимальный эл. ( как я понял изза этого дальнейшие расчеты и построения и идут крива