Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
example2.DOC
Скачиваний:
5
Добавлен:
02.06.2015
Размер:
323.07 Кб
Скачать

3.2 Со статическим определением массива

/*Даны натуральное число N и вещественные числа a и b(a<b). Сформировать

матрицу X(N,N), элементами которой Являются вещественные случайные числа,

равномерно распределенные на отрезке [a,b].Найти в матрице строку с минимальным

элементом и поменять ее местами с первой строкой.

СК-01 Бакин А А 2005г. */

#include <stdlib.h> //функции обработки строк

#include <stdio.h> //Функции ввода - вывода для стандартных потоков

#include <ctype.h> //Функции и макросы проверки и преобразования символов

#include <conio.h> //Функции для работы с терминалом в текстовом режиме

#include <string.h>

const max1=10;

const max2=10000.0;

double number(double min, double max, int pnt); //функция ввода числа

void inX(int N,double a,double b,double X[][max1]);//формирование входного массива

void pr_mas(int N,double X[][max1], char* str); //печать выходного массива

void dec(int N,double X[][max1],int minrow); //Функция замены строки

int min_row(int N,double X[][max1]);//Функция опред. строки с мin элементом

void main() //главная функция

{

char ch;

double X[max1][max1]; //статический массив

int N,i,minrow;

double a, b;

do {

clrscr();

printf(" ЗАДАНИЕ № 1\n");

printf(" Даны натуральное число N и вещественные числа a и b(a<b). Сформировать\n");

printf("матрицу X(N,N), элементами которой Являются вещественные случайные числа,\n");

printf("равномерно распределенные на отрезке [a,b].Найти в матрице строку с минимальным\n");

printf("элементом и поменять ее местами с первой строкой.\n");

ch=0;

do {

printf("\nВведите размерность матрицы (N * N) от 2 до %d: ",max1);

N=number(2,max1,1); //вызов функции ввода количества элементов массива

}

while((N<2||N>10)&&N!=0x1B);

if(N!=0x1B) {

do {

printf("\nВведите значение a от -100 до 100 : ");

a=number(-100,100,0); //вызов функции ввода количества элементов массива

}

while(a>=max2 && a!=0x1B);

if(a!=0x1B) {

do {

printf("\nВведите значение b от %lg до 200 : ",a);

b=number(a+0.01,200,0); //вызов функции ввода числа

}

while(a>b&&b!=0x1B);

if(b!=0x1B) {

inX(N,a,b,X); //вызов функции формирования входного массива

char *str = "\nInput massive\n";

pr_mas(N,X,str);

minrow=min_row(N,X);

dec(N,X,minrow);

str = "Output massive\n";

pr_mas(N,X,str);

}}}

printf("\n\nПродолжить работу программы можно по нажатию клавиши 'Y'.\n");

ch=(char)toupper(getch());

}

while (ch=='Y');

printf("\n\nКонец работы программы");

}

void pr_mas(int N,double X[][max1], char *str)

{

int i,j;

printf("%s",str);

for (i=0;i<N;i++)

{

printf("\n");

for (j=0;j<N;j++)

{

printf("%7.3lg",X[i][j]);

}

}

}

void dec(int N,double X[][max1],int minrow)

{

int i;

double temp;

for (i=0;i<N;i++)

{

temp=X[minrow][i];

X[minrow][i]=X[0][i];

X[0][i]=temp;

}

}

int min_row(int N,double X[][max1])

{

double min,minrow=0;

int i,j;

min=X[0][0];

for (i=0;i<N;i++)

for (j=0;j<N;j++)

{

if (X[i][j]<min)

{

min=X[i][j];

minrow=i;

}

}

printf("\n\nЗначение min элемента массива: %7.3lg\n",min);

printf("Строка c min элементом: %lg\n" ,minrow+1);

return minrow;

}

void inX(int N,double a,double b,double X[][max1])

{

int i=0,j;

double c;

randomize();

do

{

j=0;

do //ввод эл-тов

{

c=rand();

c=(c*(b-a)/32767)+a;

X[i][j]=c;

j++;

}

while(j<N);

i++;

}

while(i<N);

}

//---------функция проверки вводимого действительного числа

double number(double min, double max, int pnt)

{

char str[40], ch;

double num;

int ind=0;

char *str2 = "E", *ptr;

int i,j,xs,ys,ee=0,et=0;

xs=wherex(); //Координаты курсора

ys=wherey();

gotoxy(xs,ys);

do

{

ch=(char)getch();

ch=(char)toupper(ch);// Чтение символа с клавиатуры и преобразование в прописной символ

if (ch==0x1B) {printf("Esc"); return 0x1B;} //Esc

if (ch>='0' && ch<='9'&& ind<10) //Если это цифры 0..9 то

{ str[ind]=ch;putch(str[ind]);ind++; } //Очередной символ в строку, увеличить счетчик символов

if ((ind!=0)&&(ch=='.')&&(et!=1)&&(pnt==0)) //Анализ на ввод точки

{ str[ind]=ch;putch(str[ind]);ind++;et=1; }

if (((ind!=0)&&((ch=='E')||(ch=='E')))&&(ee!=1))

{ str[ind]=ch;putch(str[ind]);ind++;ee=1; }

if (((ind==0)&&(ch=='-'))||((ch=='-')&&(str[ind-1]=='E'))) //Анализ на знак минуса

{ str[ind]=ch;putch(str[ind]);ind++; }

if (ch==8 && ind>=1 ) //Если нажата клавиша BACKSPACE

{

if ((str[ind-1]>='0' && str[ind-1]<='9')|| str[ind-1]=='-')

{

ind=--ind;

gotoxy(xs,ys); //отступ на один символ влево

str[ind]=0;str[ind+1]=' ';

for(j=0;j<=ind;j++)

{ putch(str[j]);}

putch(0x8);

}

if (str[ind-1]=='E')

{ind=--ind;gotoxy(xs,ys);str[ind]=0;ee=0;str[ind+1]=' ';

for(j=0;j<=ind;j++)

{ putch(str[j]);}putch(0x8); }

if (str[ind-1]=='.')

{ind=--ind;gotoxy(xs,ys);str[ind]=0;et=0;str[ind+1]=' ';

for(j=0;j<=ind;j++)

{putch(str[j]);}

putch(0x8); }

}

if(ch==13 && ind==0) ch=14;

if(ch==13) { // нажата клавиша ENTER

num=atof(str); //пpеобpазуем всю стpоку в число

if(num>=min&&num<=max) { //если число соответствует диапазону

return(num); } //то функция возвpащает числовое значение

ch=14; }

} while(ch!=13);

return(0);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]