#include <stdio.h>
#include <malloc.h>
typedef struct Line{
int n;
double * a;
} Line;
typedef struct Matrix{
int lines;
Line * matr;
} Matrix;
int getInt( int * ) ;
int getDouble( double * ) ;
int input( Matrix * a) ;
void output( const char * msg, Matrix a) ;
void erase( Matrix * a) ;
double minmax( Matrix a) ;
double max( double a[ ] , int m) ;
double min( double a[ ] , int m) ;
double mm( double a[ ] , int m, int flag) ;
int main( )
{
Matrix matr = { 0 , NULL} ;
double res;
if ( input( & matr) == 0 ) {
printf ( "%s\n " , "End of file occured" ) ;
return 1 ;
}
res = minmax( matr) ;
output( "Source matrix" , matr) ;
erase( & matr) ;
return 0 ;
}
int getInt( int * a)
{
int n;
do {
n = scanf_s( "%d" , a, sizeof ( int ) ) ;
if ( n < 0 )
return 0 ;
if ( n == 0 ) {
printf ( "%s\n " , "Error! Repeat input" ) ;
scanf_s( "%*c" , 0 ) ;
}
} while ( n == 0 ) ;
return 1 ;
}
int getDouble( double * a)
{
int n;
do {
n = scanf_s( "%lf" , a, sizeof ( double ) ) ;
if ( n < 0 )
return 0 ;
if ( n == 0 ) {
printf ( "%s\n " , "Error! Repeat input" ) ;
scanf_s( "%*c" , 0 ) ;
}
} while ( n == 0 ) ;
return 1 ;
}
int input( Matrix * rm)
{
const char * pr = "" ;
int m;
int i, j;
double * p;
do {
printf ( "Enter number of lines: --> " ) ;
pr = "You are wrong; repeat, please!" ;
if ( getInt( & m) == 0 )
return 0 ;
} while ( m < 1 ) ;
rm-> lines = m;
rm
-> matr
= ( Line
* ) calloc ( m
, sizeof ( Line
) ) ;
for ( i = 0 ; i < rm-> lines; ++ i) {
pr = "" ;
do {
printf ( "Enter number of items in line %d: --> " , i
+ 1 ) ;
pr = "You are wrong; repeat, please!" ;
if ( getInt( & m) == 0 ) {
rm-> lines = i;
erase( rm) ;
return 0 ;
}
} while ( m < 1 ) ;
rm-> matr[ i] .n = m;
p
= ( double * ) malloc ( sizeof ( double ) * m
) ;
rm-> matr[ i] .a = p;
printf ( "Enter items for matrix line #%d:\n " , i
+ 1 ) ;
for ( j = 0 ; j < m; ++ j, ++ p)
if ( getDouble( p) == 0 ) {
rm-> lines = i + 1 ;
erase( rm) ;
return 0 ;
}
}
return 1 ;
}
void output( const char * msg, Matrix a)
{
int i, j;
double * p;
for ( i = 0 ; i < a.lines ; ++ i) {
p = a.matr [ i] .a ;
for ( j = 0 ; j < a.matr [ i] .n ; ++ j, ++ p)
}
}
void erase( Matrix * a)
{
int i;
for ( i = 0 ; i < a-> lines; ++ i)
a-> lines = 0 ;
a-> matr = NULL;
}
double minmax( Matrix pm)
{
double * s
= ( double * ) malloc ( sizeof ( double ) * pm.
lines ) ;
double res;
double * p = s;
int i;
for ( i = 0 ; i < pm.lines ; ++ i)
* p++ = max( pm.matr [ i] .a , pm.matr [ i] .n ) ; // ȜȟȜ s[i] = mm(pm.matr[i].a,pm.matr[i].n, 1);
res = min( s, pm.lines ) ; // ȜȟȜ res = mm(s, pm.lines, -1);
return res;
}
double max( double a[ ] , int m)
{
double res = * a;
for ( ; m-- > 0 ; ++ a)
if ( * a > res)
res = * a;
return res;
}
double min( double a[ ] , int m)
{
double res = * a;
for ( ; m-- > 0 ; ++ a)
if ( * a < res)
res = * a;
return res;
}
double mm( double a[ ] , int m, int flag)
{
double res = * a;
for ( ; m-- > 0 ; ++ a)
if ( flag > 0 ? * a > res : * a < res) // ȜȟȜ (*a * flag > res * flag)
res = * a;
return res;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojaW5jbHVkZSA8bWFsbG9jLmg+CgoKdHlwZWRlZiBzdHJ1Y3QgTGluZXsKCmludCBuOyAKCmRvdWJsZSAqYTsKCn0gTGluZTsKCgp0eXBlZGVmIHN0cnVjdCBNYXRyaXh7CgppbnQgbGluZXM7IAoKTGluZSAqbWF0cjsgCgp9IE1hdHJpeDsKCgppbnQgZ2V0SW50KGludCAqKTsgCgppbnQgZ2V0RG91YmxlKGRvdWJsZSAqKTsgCgppbnQgaW5wdXQoTWF0cml4ICphKTsgCgp2b2lkIG91dHB1dChjb25zdCBjaGFyICptc2csIE1hdHJpeCBhKTsgCgp2b2lkIGVyYXNlKE1hdHJpeCAqYSk7Cgpkb3VibGUgbWlubWF4KE1hdHJpeCBhKTsgCgpkb3VibGUgbWF4KGRvdWJsZSBhW10sIGludCBtKTsgCgpkb3VibGUgbWluKGRvdWJsZSBhW10sIGludCBtKTsgCgpkb3VibGUgbW0oZG91YmxlIGFbXSwgaW50IG0sIGludCBmbGFnKTsgCgoKCmludCBtYWluKCkKCnsKCk1hdHJpeCBtYXRyID0gezAsIE5VTEx9OwoKZG91YmxlIHJlczsKCmlmIChpbnB1dCgmbWF0cikgPT0gMCl7IAoKcHJpbnRmKCIlc1xuIiwgIkVuZCBvZiBmaWxlIG9jY3VyZWQiKTsKCnJldHVybiAxOwoKfQoKcmVzID0gbWlubWF4KG1hdHIpOyAKCm91dHB1dCgiU291cmNlIG1hdHJpeCIsIG1hdHIpOwoKcHJpbnRmKCJSZXN1bHQ6ICVmXG4iLCByZXMpOwoKZXJhc2UoJm1hdHIpOyAKCnJldHVybiAwOwoKfQoKCmludCBnZXRJbnQoaW50ICphKQoKewoKaW50IG47Cgpkb3sKCm4gPSBzY2FuZl9zKCIlZCIsIGEsIHNpemVvZihpbnQpKTsKCmlmIChuIDwgMCkKCnJldHVybiAwOwoKaWYgKG4gPT0gMCl7IAoKcHJpbnRmKCIlc1xuIiwgIkVycm9yISBSZXBlYXQgaW5wdXQiKTsKCnNjYW5mX3MoIiUqYyIsIDApOwoKfQoKfSB3aGlsZSAobiA9PSAwKTsKCnJldHVybiAxOwoKfQoKCmludCBnZXREb3VibGUoZG91YmxlICphKQoKewoKaW50IG47Cgpkb3sKCm4gPSBzY2FuZl9zKCIlbGYiLCBhLCBzaXplb2YoZG91YmxlKSk7CgppZiAobiA8IDApIAoKcmV0dXJuIDA7CgppZiAobiA9PSAwKXsgCgpwcmludGYoIiVzXG4iLCAiRXJyb3IhIFJlcGVhdCBpbnB1dCIpOwoKc2NhbmZfcygiJSpjIiwgMCk7Cgp9Cgp9IHdoaWxlIChuID09IDApOwoKcmV0dXJuIDE7Cgp9CgoKaW50IGlucHV0KE1hdHJpeCAqcm0pCgp7Cgpjb25zdCBjaGFyICpwciA9ICIiOyAKCmludCBtOyAKCmludCBpLCBqOwoKZG91YmxlICpwOwoKCmRvewoKcHJpbnRmKCIlc1xuIiwgcHIpOwoKcHJpbnRmKCJFbnRlciBudW1iZXIgb2YgbGluZXM6IC0tPiAiKTsKCnByID0gIllvdSBhcmUgd3Jvbmc7IHJlcGVhdCwgcGxlYXNlISI7CgppZihnZXRJbnQoJm0pID09IDApCgpyZXR1cm4gMDsgCgp9IHdoaWxlIChtIDwgMSk7CgpybS0+bGluZXMgPSBtOwoKcm0tPm1hdHIgPSAoTGluZSAqKWNhbGxvYyhtLCBzaXplb2YoTGluZSkpOwoKZm9yIChpID0gMDsgaSA8IHJtLT5saW5lczsgKytpKXsKCnByID0gIiI7Cgpkb3sKCnByaW50ZigiJXNcbiIsIHByKTsKCnByaW50ZigiRW50ZXIgbnVtYmVyIG9mIGl0ZW1zIGluIGxpbmUgJWQ6IC0tPiAiLCBpICsgMSk7CgpwciA9ICJZb3UgYXJlIHdyb25nOyByZXBlYXQsIHBsZWFzZSEiOwoKaWYgKGdldEludCgmbSkgPT0gMCl7CgpybS0+bGluZXMgPSBpOyAKCmVyYXNlKHJtKTsKCnJldHVybiAwOyAKCn0KCn0gd2hpbGUgKG0gPCAxKTsKCnJtLT5tYXRyW2ldLm4gPSBtOwoKCgpwID0gKGRvdWJsZSAqKW1hbGxvYyhzaXplb2YoZG91YmxlKSogbSk7CgpybS0+bWF0cltpXS5hID0gcDsKCnByaW50ZigiRW50ZXIgaXRlbXMgZm9yIG1hdHJpeCBsaW5lICMlZDpcbiIsIGkgKyAxKTsKCmZvciAoaiA9IDA7IGogPCBtOyArK2osICsrcCkKCmlmIChnZXREb3VibGUocCkgPT0gMCl7CgpybS0+bGluZXMgPSBpICsgMTsgCgplcmFzZShybSk7CgpyZXR1cm4gMDsKCn0KCn0KCnJldHVybiAxOwoKfQoKdm9pZCBvdXRwdXQoY29uc3QgY2hhciAqbXNnLCBNYXRyaXggYSkKCnsKCmludCBpLCBqOwoKZG91YmxlICpwOwoKcHJpbnRmKCIlczpcbiIsIG1zZyk7Cgpmb3IgKGkgPSAwOyBpIDwgYS5saW5lczsgKytpKXsKCnAgPSBhLm1hdHJbaV0uYTsKCmZvciAoaiA9IDA7IGogPCBhLm1hdHJbaV0ubjsgKytqLCArK3ApCgpwcmludGYoIiUxMGxmICIsICpwKTsKCnByaW50ZigiXG4iKTsKCn0KCn0KCgp2b2lkIGVyYXNlKE1hdHJpeCAqYSkKCnsKCmludCBpOwoKZm9yIChpID0gMDsgaSA8IGEtPmxpbmVzOyArK2kpCgpmcmVlKGEtPm1hdHJbaV0uYSk7CgpmcmVlKGEtPm1hdHIpOwoKYS0+bGluZXMgPSAwOwoKYS0+bWF0ciA9IE5VTEw7Cgp9Cgpkb3VibGUgbWlubWF4KE1hdHJpeCBwbSkKCnsKCmRvdWJsZSAqcyA9IChkb3VibGUgKiltYWxsb2Moc2l6ZW9mKGRvdWJsZSkqIHBtLmxpbmVzKTsgCgpkb3VibGUgcmVzOyAKZG91YmxlICpwID0gczsKCmludCBpOwoKZm9yIChpID0gMDsgaSA8IHBtLmxpbmVzOyArK2kpCgoqcCsrID0gbWF4KHBtLm1hdHJbaV0uYSwgcG0ubWF0cltpXS5uKTsgLy8gyJzIn8icIHNbaV0gPSBtbShwbS5tYXRyW2ldLmEscG0ubWF0cltpXS5uLCAxKTsKCnJlcyA9IG1pbihzLCBwbS5saW5lcyk7IC8vIMicyJ/InCByZXMgPSBtbShzLCBwbS5saW5lcywgLTEpOwoKZnJlZShzKTsKCnJldHVybiByZXM7Cgp9CgoKZG91YmxlIG1heChkb3VibGUgYVtdLCBpbnQgbSkKCnsKCmRvdWJsZSByZXMgPSAqYTsgCmZvciAoOyBtLS0gPiAwOyArK2EpCgppZiAoKmEgPiByZXMpCgpyZXMgPSAqYTsKCnJldHVybiByZXM7Cgp9Cgpkb3VibGUgbWluKGRvdWJsZSBhW10sIGludCBtKQoKewoKZG91YmxlIHJlcyA9ICphOyAKCmZvciAoOyBtLS0gPiAwOyArK2EpCgppZiAoKmEgPCByZXMpCgpyZXMgPSAqYTsKCnJldHVybiByZXM7Cgp9CgoKCmRvdWJsZSBtbShkb3VibGUgYVtdLCBpbnQgbSwgaW50IGZsYWcpCgp7Cgpkb3VibGUgcmVzID0gKmE7Cgpmb3IgKDsgbS0tID4gMDsgKythKQoKaWYgKGZsYWcgPiAwID8gKmEgPiByZXMgOiAqYSA8IHJlcykgLy8gyJzIn8icICgqYSAqIGZsYWcgPiByZXMgKiBmbGFnKQoKcmVzID0gKmE7CgpyZXR1cm4gcmVzOwoKfQ==