Подпрограммы в языке "Си". Создание программного интерфейса

Характеристика системы программирования Турбо Паскаль, анализ его структуры и принципа работы. Проектирование модуля (схемы алгоритма), содержащего процедуры и функции, решающие поставленную задачу. Описание процесса создания программного интерфейса.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.02.2011
Размер файла 52,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

10

КУРСОВАЯ РАБОТА

на тему: «Подпрограммы в языке «Си». Создание программного интерфейса на языке «Си»»

Введение

Система программирования Турбо Паскаль представляет собой единство двух в известной степени самостоятельных начал: компилятора с языка программирования Паскаль (язык назван в честь выдающегося французского математика и философа Блеза Паскаля (1623-1662)) и некоторой инструментальной программной оболочки, способствующей повышению эффективности создания программ.

Модульное программирование - это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняется определённым правилам.

Использование модулей позволяет упростить тестирование программы и обнаружение ошибок. Аппаратно-зависимые подзадачи могут быть строго отделены от других подзадач, что улучшает мобильность создаваемых программ.

Турбо Паскаль позволяет создавать модули для дальнейшей универсальной обработки задач. Модули состоят из подпрограмм: процедур и функций.

Цель данной работы - закрепить навыки программирования в среде Турбо Паскаль, разработать модуль (схему алгоритма и программу), содержащий процедуры и функции, решающие поставленную задачу.

Работа состоит из введения, задания, двух глав, в первой из которых рассматривается система проектирования модуля, а во второй - процесс создания программного интерфейса, заключения и списка использованной литературы.

Теоретическая часть состоит из основных определений модуля в Турбо Паскале, описания его структуры и принципа работы

«Модуль в Турбо Паскале»

Разработать модуль (схему алгоритма и программу), содержащей процедуры и функции, решающие поставленную задачу:

Получить матрицу D[m,n] путем умножения матрицы B[m,k] на матрицу E[k,n]. Определить в результирующей матрице столбец с наибольшей суммой отрицательных элементов и упорядочить этот столбец по убыванию.

Для отладки модуля разработать вызывающую программу.

«Создание программного интерфейса»

Разработать программный интерфейс типа меню для обработки матрицы произвольного размера. Предусмотреть вывод на экран заставки, содержащие реквизиты разработчика.

Меню должно обеспечивать возможность:

- вывода матрицы любого размера (предусмотреть вывод матрицы с клавиатуры, из файла и форматировать датчиком случайных чисел);

- обработку матрицы с использованием подпрограмм Вашего модуля;

- вывод результатов (предусмотреть вывод информации на экран, в текстовый файл и на принтер, по выбору).

Теория создания библиотек подпрограмм.

Стандартной библиотекой языка Си (также известная как libc) называется нестандартизованная коллекция заголовочных файлов и библиотек, вызываемых как подпрограммы для реализации общих операций, таких как обработка ввода/вывода и строк в языке программирования Си. В отличие от остальных языков, как, например, КОБОЛ, Фортран и ПЛ/1, Си не содержит встроенных ключевых слов для подобных задач, поэтому все программы, написанные на языке Си, опираются на функции стандартной библиотеки.

Имя и характеристики каждой функции указываются в файле, именуемым заголовочным файлом, но текущая реализация функций описана отдельно в библиотечном файле. Наименование и возможности заголовочных файлов становятся общими, но организация библиотек по-прежнему остается разнотипной. Стандартная библиотека обычно поставляется вместе с компилятором. Так как компиляторы языка Си часто обеспечивают расширенную функциональность, не определенную стандартом ANSI C, стандартная библиотека одного компилятора несовместима со стандартными библиотеками других компиляторов.

Большая часть стандартной библиотеки языка Си производит впечатление удачно спроектированной. Некоторые отдельные части, дававшие преимущество в прошлом, могут провоцировать ошибки. Функции строкового ввода gets() (и применение scanf() для считывания вводимых строк) являются источником множества переполнений буфера, поэтому большинство руководств по программированию советуют избегать подобных приемов. Функция strcpy() также весьма печально знаменита. Еще одной неоднозначной функцией является strtok() -- функция, разработанная как простейший лексический анализатор, но имеющая множество «подводных камней» и потому весьма трудная в использовании.

Выбор применения типа size_t вместо int для числа элементов, указанных для fread() и fwrite() является несовместимым с разработанной общей семантикой для size_t (для представления количества байтов).

stdio достаточно ограничен (слишком высокий уровень для использования во многих ситуациях) и стандарт не позволяет пользователю самостоятельно переназначать или расширять его свойства. В итоге, для множества приложений разрабатывается собственные библиотеки-обертки вокруг механизмов более низкого уровня и функций, реализуемых ОС, таких как POSIX. Например, stdio не работают с сигналами или асинхронными непакетными режимами ввода-вывода, которые широко используются в сетевых серверах. В итоге, только серверы, использующие модель целого процесса для клиента, могут полностью полагаться на функции stdio для обслуживания их на POSIX-совместимых системах в пакетном режиме ввода-вывода.

Определенных функций стандартной библиотеки нужно избегать при разработке многопоточных приложений. Примитивы контроля потоков предназначались для оставшейся части ОС и игнорируют общие стандарты, как например, библиотеку потоков POSIX, ожидая, что программисты языка Си, самостоятельно об этом позаботятся работая с повторным использованием и синхронизацией. Ни язык Си, ни его стандартная библиотека никак не проверяют подобные системноспецифичные результаты.

1. Блок-схемы подпрограмм

ввод матрицы датчиком случайных чисел

Размещено на http://www.allbest.ru/

10

ввод матриц с клавиатуры

Размещено на http://www.allbest.ru/

10

формирование матрицы d[i][j] путем умножения двух матриц

Размещено на http://www.allbest.ru/

10

максимум

Размещено на http://www.allbest.ru/

10

формирование

Размещено на http://www.allbest.ru/

10

печать массива

Размещено на http://www.allbest.ru/

10

упорядочение

Размещено на http://www.allbest.ru/

10

2. Подпрограммы

программирование интерфейс паскаль модуль

ввод матрицы датчиком случайных чисел

void vvod_rand(int m,int n,int k,int b[20][20],int e[20][20])

{

int i,j;

randomize();

for(i = 1; i <= m; i++)

for(j = 1; j <= k; j++)

b[i][j] = rand() % 10-7;

for(i = 1; i <= k; i++)

for(j = 1; j <= n; j++)

e[i][j] = rand() % 10-7;

}

ввод матриц с клавиатуры

void vvod_ekran(int m,int n,int k,int b[20][20],int e[20][20])

{

int i,j;

printf("Vvedite m, n, k : \n");

scanf("%d %d %d", m, n, k);

printf("Vvedite matricu m x k :\n");

for(i = 1; i <= m; i++)

for(j = 1; j <= k; j++)

scanf("%d", &b[i][j]);

printf("Vvedite matricu k x n :\n");

for(i = 1; i <= k; i++)

for(j = 1; j <= n; j++)

scanf("%d", &e[i][j]);

getch();

}

ввод матриц из файла

void vvod_file(int n,int k,int b[20][20],int e[20][20])

{

char s[10];

int c,i,j;

printf("kakoi file otkroem dlya sozdaniya matricy b:");scanf("%s",&s);

f=fopen(s,"r");

i=1;

while(!feof(f))

{

for (j=1;j<=k;j++)

{

fscanf(f,"%d",&c);

b[i][j]=c;

}

i=i+1;

}

fclose(f);

printf("kakoi file otkroem dlya sozdaniya matricy e:");scanf("%s",&s);

f=fopen(s,"r");

i=1;

while(!feof(f))

{

for (j=1;j<=n;j++)

{

fscanf(f,"%d",&c);

e[i][j]=c;

}

i=i+1;

}

fclose(f);

}

формирование матрицы d[i][j] путем умножения двух матриц

void form_d(int m,int n,int k,int b[20][20],int e[20][20])

{

int i,j,l;

for(i = 1; i <= m; i++)

for(j = 1; j <= n; j++)

{

d[i][j]=0;

for(l = 1; l <= k; l++)

d[i][j]=b[i][l]*e[l][j];

}}

нахождение суммы отрицательных элементов

void form_u(int m,int n,int d[20][20],int u[20])

{

int i,j,s;

for(j = 1; j <= n; j++)

{

s=0;

for(i = 1; i <= m; i++)

{if (d[i][j]<0)

s+=d[i][j];

u[j]=s;

}

}

}

нахождние максимума в строке с наибольшей суммой отрицательных элементов

void max_j(int u[20],int n,int max)

{

int j;

max=-1000;x=0;

for (j = 1; j <= n; j++)

if ((u[j]>max)&&(u[j]<0))

{max=u[j];

x=j;}

}

вывод массива на экран

void vivod_ekran_mas(int m,int u[20])

{

int i;

for (i=1;i<=m;i++)

printf("%3d",u[i]);

}

упорядочивание по убыванию методом пузырька

void yporyadochivanie(int m,int x,int d1[20][20])

{int y,i,z;

for (y=2;y<=m;y++)

for (i=m;i>=y;i--)

if (d1[i][x]>d1[i-1][x])

{

z=d1[i][x];

d1[i][x]=d1[i-1][x];

d1[i-1][x]=z;

}

}

вывод на экран матрицы

void vivod_ekran_matr(int m,int n,int d[20][20])

{

int i,j;

printf("\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=n;j++)

printf("%3d",d[i][j]);

printf("\n");

}

}

вывод на экран результатов из файла

void vivod (int m,int n,int k,int b[20][20],int e[20][20],int d[20][20],int d1[20][20],int u[20])

{

int i,j;

f=fopen("result.dat","w");

fprintf(f,"programmu razrabotala:\n");

fprintf(f,"Gayvoronskaya Vicktoria, gr.S-89,fac.MRM\n");

fprintf(f,"SibSUTI, 2009\n\n");

fprintf(f,"Zadanie na kursovuyu rabotu:\n");

fprintf(f,"Sozdat matrici B,E razmerom po viboru polzovatelya:\n");

fprintf(f,"sluchainim obrazom, schitat iz faila, vvesti s klaviatury\n");

fprintf(f,"Poluchit massiv D putem ymnogeniya matrici B[m,k] na matricy E[k,n]\n");

fprintf(f,"Opredelit v rezultirujuchej matrice stolbec c naibolshej symmoj otricatelnih elementov\n");

fprintf(f,"Yporadochit etot stolbec po ubivaniju\n");

fprintf(f,"Vivesti rezultaty po viboru na ekran,printer,v file\n");

fprintf(f,"Sozdat module s procedurami realizacii vseh ukazannih voprosov\n");

fprintf(f,"Razrabotat programmniy interface\n\n");

fprintf(f,"Rezultaty raboty\n\n");

fprintf(f,"Ishodnie matrici\n\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=k;j++)

fprintf(f,"%3d",b[i][j]);

fprintf(f,"\n");

}

for (i=1;i<=k;i++)

{

for (j=1;j<=n;j++)

fprintf(f,"%3d",e[i][j]);

fprintf(f,"\n");

}

fprintf(f,"\nMtrica d[m][n] putem ymnojenija b[m][k] na e[k][n]\n\n");

for (i=1;i<=m;i++)

for (j=1;j<=n;j++)

fprintf(f,"%3d",d[i][j]);

fprintf(f,"\nMassiv u - naibolshaja summa otricatelnih elementov v matr D\n");

fprintf(f,"\n");

for (i=1;i<=m;i++)

fprintf(f,"%3d\n",u[i]);

fprintf(f,"\nUporadichevanie po ubivaniju\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=n;j++)

fprintf(f,"%3d",d1[i][j]);

fprintf(f,"\n");

}

fclose(f);

}

(вывод на экран матрицы)

void vivod_ekran (int m,int n,int k,int b[20][20],int e[20][20],int d[20][20],int d1[20][20],int u[20])

{

int i,j;

printf("programmu razrabotala:\n");

printf("Gayvoronskaya Vicktoria, gr.S-89,fac.MRM\n");

printf("SibSUTI, 2009\n\n");

printf("Zadanie na kursovuyu rabotu:\n");

printf("- Sozdat matrici B,E razmerom po viboru polzovatelya:\n");

printf("sluchainim obrazom, schitat iz faila, vvesti s klaviatury\n");

printf("- Poluchit massiv D putem ymnogeniya matrici B[m,k] na matricy E[k,n]\n");

printf("- Opredelit v rezultirujuchej matrice stolbec c naibolshej symmoj otricatelnih elementov\n");

printf("- Yporadochit etot stolbec po ubivaniju\n");

printf("- Vivesti rezultaty po viboru na ekran,printer,v file\n");

printf("- Sozdat module s procedurami realizacii vseh ukazannih voprosov\n");

printf("- Razrabotat programmniy interface\n\n");

printf("Rezultaty raboty\n\n");

printf("Ishodnie matrici\n\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=k;j++)

printf("%3d",b[i][j]);

printf("\n");

}

for (i=1;i<=k;i++)

{

for (j=1;j<=n;j++)

printf("%3d",e[i][j]);

printf("\n");

}

printf("\nMatrica d[m][n] putem ymnojenija b[m][k] na e[k][n]\n\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=n;j++)

printf("%3d",d[i][j]);

printf("\n");

}

printf("\nMassiv u - naibolshaja summa otricatelnih elementov v matr D\n");

for (i=1;i<=m;i++)

printf("%3d",u[i]);

printf("\n");

printf("\nUporadichevanie po ubivaniju\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=n;j++)

printf("%3d",d1[i][j]);

printf("\n");

}

}

3. Создание библиотеки подпрограмм

#include"lib.cpp"

extern vvod_rand(int m,int n,int k,int b[20][20],int e[20][20]);

extern vvod_ekran(int m,int n,int k,int b[20][20],int e[20][20]);

extern vvod_file(int n,int k,int b[20][20],int e[20][20]);

extern form_d(int m,int n,int k,int b[20][20],int e[20][20]);

extern form_u(int m,int n,int d[20][20],int u[20]);

extern max_j(int u[20],int n,int max);

extern vivod_ekran_mas(int m,int u[20]);

extern yporyadochivanie(int m,int x,int d1[20][20]);

extern vivod_ekran_matr(int m,int n,int d[20][20]);

extern vivod (int m,int n,int k,int b[20][20],int e[20][20],int d[20][20],int d1[20][20],int u[20]);

extern vivod_ekran (int m,int n,int k,int b[20][20],int e[20][20],int d[20][20],int d1[20][20],int u[20])

4. «Создание программного интерфейса»

Теория к интерфейсу.

Каждую вычислительную систему можно оценивать по двум критериям: точность и удобство.

Точность означает, что при поступлении на вход системы заданных значений на ее выходе получаются ожидаемые результаты. Чтобы работа с компьютером была удобной, пользователь должен при взаимодействии с системой ощущать комфорт. Таким образом, на удобство работы влияют факторы, которые вызывают чувство комфорта. Их можно разделить на три большие группы, представленные на рисунке 1.

Общий психологический климат в организации, а также форма поднесения сведений о вычислительной системе могут вызвать предубеждение против этой системы задолго до того, как пользователь познакомится с ней практически. Функции, которые система возлагает на пользователя, и способ выполнения этих функций, могут нарушить сложившиеся рабочие группы, лишить исполнителя привычного общения или испортить его отношения с руководством. Эти социальные факторы могут усилить или ослабить опасения пользователя относительно системы.

Если пользователь относится к системе без предубеждений, эргономические характеристики реальной системы могут существенно улучшить или ухудшить его отношение к ней.

Основные эргономические характеристики :

- конструктивные особенности оборудования;

- качество разработки диалога;

- надежность систем;

- чувствительность систем.

Конструктивные особенности оборудования и размещение его в рамках рабочей станции могут повлиять на чувство физического комфорта пользователя при его работе с системой

Третий фактор - это психологическая эргономика, которая занимается изучением соответствия функций системы психологическим процессам человека. Здесь играют важную роль качественные разработки диалога, доступность и чувствительность системы. Для обеспечения эффективной работы оператора надо учитывать его эмоциональные, психологические и физиологические особенности. Если пользователь расстроен, раздражен или подавлен, он не сможет работать хорошо. Элементом системы, который может вызвать или, наоборот, снять стресс, является интерфейс человек-компьютер, то есть среда, через которую пользователь взаимодействует с системой.

Рис. 1. Факторы, воздействующие на комфорт пользователя

Размещено на http://www.allbest.ru/

10

Для оценки интерфейса существуют несколько критериев [8].Все он охватывают три основных аспекта:

- простота освоения и запоминания операционной системы;

- быстрота достижения целей задачи, решаемой с помощью системы;

- субъективная удовлетворенность при эксплуатации системы.

С точки зрения программного обеспечения в состав интерфейса входят два компонента:

- набор процессов ввода-вывода;

- процесс диалога.

Диалог между человеком и компьютером можно определить как обмен информацией между вычислительной системой и пользователем, проводимый с помощью интерактивного терминала и по определенным правилам.

Процесс диалога - это механизм обмена информацией, который можно рассматривать как оболочку, включающую все входящие в систему процессы по выполнению определенных заданий. Структура диалога является основой для классификации интерфейса человек-компьютер [8].

Традиционно выделяют четыре основные структуры типов:

- вопрос-ответ;

- меню;

- экранных форм;

- на базе команд, каждая из которых основывается на аналогии с определенным типом взаимодействия между людьми.

Требования к диалогу:

- естественность;

- последовательность;

- краткость;

- поддержка пользователя;

- гибкость.

Эти критерии применимы не только к основным структурам диалога и содержимому отображаемых сообщений, но и к тому, как они выглядят на экране. Внешний вид экрана зависит от того, какие поля сообщений отображаются, в каком месте и с какими атрибутами.

Данные должны располагаться таким образом, чтобы пользователь мог просматривать экран в логической последовательности и мог легко:

- выводить нужную информацию;

- идентифицировать связанные группы информации;

- различать исключительные ситуации (сообщения об ошибках или предупреждения);

- определять какое действие с его стороны требуется (и требуется ли вообще) для продолжения выполнения задачи.

Выделение информации - это использование таких атрибутов, которые позволяют привлечь внимание пользователя к некоторой области экрана: цвет символов, цвет фона, уровень яркости и режим мерцания, звук.

Структура диалога типа меню и разработка экранных форм

Структура диалога типа меню является известным механизмом организации запросов на ввод данных во время диалога, управляемого компьютером.

Меню в виде блока данных на экране - это традиционный формат.

Меню в виде строки данных может появляться вверху или внизу экрана и часто остается в этой позиции на протяжении всего диалога.

Таким образом, посредством меню удобно отображать возможные варианты данных для ввода, доступных в любое время работы в диалоге. Еще один распространенный способ представления используется для отображения дополнительных меню в виде блоков данных, которые “выскакивают или выпадают” на экран в текущем положении курсора, либо “вытягиваются” непосредственно из строки меню верхнего уровня. Эти меню исчезают после выбора варианта.

В диалоге на базе меню имеет смысл либо значение выбранного пункта меню (содержимое объекта выбора), либо номер выбранного пункта меню (первый, второй и т.д.).

В идеале, экранное меню должно содержать 5-6 пунктов; следует избегать списка из 10 и более пунктов.

Структура типа меню является наиболее естественным механизмом для работы с устройствами указания и выбора: меню представляет собой изображение тех объектов, которые выбираются пользователем. Текущий выбранный объект неизменно выделяется.

Структура диалога на основе экранных форм используется на практике в основном там, где учет какой-либо деятельности (транзакции) требует ввода достаточно стандартного набора данных.

Диалог типа экранных форм обычно имеет следующие возможности:

- пользователь заполняет ее слева - направо и сверху - вниз, он может выбирать последовательность ответов, временно пропускать некоторый вопрос, возвращаться назад для коррекции предыдущего ответа;

- пользователь может работать с формой до тех пор, пока он, удовлетворенный проделанной работой, не нажмет определенную клавишу, означающую конец ввода или отказ.

Проверка данных осуществляется сразу же после ввода ответа пользователя. Сообщения об ошибках, выводимые непосредственно после ответа, способствуют правильному заполнению предлагаемой формы с самого начала, без возврата для ее коррекции.

Разработка интерфейса.

void main()

{

l='0';

while (l!='5')

{

clrscr();

gotoxy(18,6);

printf("Menu");

gotoxy(5,12);

printf("1.Vvod razmerov matricbI");

gotoxy(5,9);

printf("0. Zadanie i informaciya o razrabot4ike");

gotoxy(5,15);

printf("2.Vvod matricbI");

gotoxy(5,18);

printf("3.Obrabotka matricbI");

gotoxy(5,21);

printf("4.VbIvod matricbI");

gotoxy(5,24);

printf("5.VbIxod");

gotoxy(7,27);

printf(" vbIberite punkt punkt - ");

l=getch();

switch(l)

{

case '0':

{

clrscr();

printf("RAZRABOTCHIK: \n");

printf("\n");

printf("Gayvoronskaya Vicktoria, gr.S-89, Fakultet MRM ");

printf("\n");

printf("SibSUTI, 2009");

printf("\n");

printf(" Zadanie na kyrsovyy raboty:");

printf("\n");

printf("- Sozdat matrici B,E razmerom po viboru polzovatelya:\n");

printf("- sluchainim obrazom, schitat iz faila, vvesti s klaviatury\n");

printf("- Poluchit massiv D putem ymnogeniya matrici B[m,k] na matricy E[k,n]\n");

printf("- Opredelit v rezultirujuchej matrice stolbec c naibolshej symmoj otricatelnih elementov\n");

printf("- Yporadochit etot stolbec po ubivaniju\n");

printf("- VbIvesti rezultatbI po vbIbory na ekran, printer libo v fail");

printf("\n");

printf(" - Sozdatb modul s procedyrami realizacii vsex ykazannbIx voprosov");

printf("\n");

printf(" - Razrabotat programmnbIi interfeis");

printf("\n");

printf("Press Enter please");

getch();

break;

}

case '1':

{

clrscr();

gotoxy(5,5);

printf("vvedite kol strok matricy b: \n");

scanf("%d",&m);

printf("vvedite kol stolbcov matricy b: \n");

scanf("%d",&k);

printf("vvedite kol strok matricy e: \n");

scanf("%d",&k);

printf("vvedite kol stolbcov matricy e: \n");

scanf("%d",&n);

flag=1;

gotoxy (10,15);

printf(" Enter -dalshe\n");

getch();

break;

}

case '2':

{

clrscr();

if (flag!=1)

{

clrscr();

gotoxy(5,5);

printf ("vvedire razmeri matryc\n");

gotoxy (10,8);

printf (" Enter - Dalee\n");

getch();

}

if (flag==1)

{

clrscr();

gotoxy(5,5);

printf("Vvod matricy");

gotoxy(7,8);

printf("1. Random matr");

gotoxy(7,11);

printf("2. S klaviaturi");

gotoxy(7,14);

printf("3. Zapolnenie matricy iz faila");

gotoxy(7,17);

printf(" vash vibor punkta menu - ");

r=getch();

switch (r)

{

case '1':

{

vvod_rand(m,n,k,b,e); flag=2;

printf("\n");

printf("\n");

vivod_ekran_matr(m,k,b);

printf("\n");

vivod_ekran_matr(k,n,e);

printf("\n");

printf(" Enter - Dalee\n");

getch();

break;

}

case '2':

{

clrscr();

vvod_ekran (m,n,k,b,e); flag=2;

printf("\n");

printf("\n");

vivod_ekran_matr(m,k,b);

printf("\n");

vivod_ekran_matr(k,n,e);

printf("\n");

printf(" Enter - Dalee\n");

getch();

break;

}

case '3':

{

clrscr();

vvod_file (n,k,b,e); flag=2;

printf("\n");

printf("\n");

vivod_ekran_matr(m,k,b);

printf("\n");

vivod_ekran_matr(k,n,e);

printf("\n");

printf(" Enter - Dalee\n");

getch();

break;

}

}

}

break;

}

case '3':

{

if (flag!=2)

{

clrscr();

gotoxy(5,5);

printf("Zadaite matricu");

gotoxy(5,11);

printf(" Enter - Dalee");

getch();

}

else

{

clrscr();

printf("ishodnaya matrica\n\n");

vivod_ekran_matr(m,k,b);

vivod_ekran_matr(k,n,e);

printf(" Enter - Dalee\n");

getch();

form_d(m,n,k,b,e);

printf("\n");

printf("Sphormirovannaja matrica \n");

vivod_ekran_matr(m,n,d);

printf("\n");

form_u(m,n,d,u);

vivod_ekran_mas(m,u);

printf("\n");

max_j(u,n,max);

printf("Stolbec j - naibolshaja summa otricatelnih elementov v matrice: %d", x);

printf("\nUporadichevanie - uporadichevanie po ubivaniju\n");

for (b1=1;b1<=m;b1++)

for (b2=1;b2<=n;b2++)

{d1[b1][b2]=d[b1][b2];}

yporyadochivanie(m,x,d1);

vivod_ekran_matr(m,n,d1);

flag=3;

printf(" Enter - Dalee\n");

getch();

}

break;

}

case '4':

{

clrscr();

if (flag!=3)

{

clrscr();

gotoxy(5,5);

printf("punkt predydushii nado vipolnit");

gotoxy(10,8);

printf(" Enter - Dalee");

getch();

}

else

{

clrscr();

gotoxy(5,5);

printf("Vivod rezultatov");

gotoxy(7,8);

printf("1. Na ekran");

gotoxy(7,11);

printf("2. V fail");

gotoxy(7,14);

printf("3. Na printer");

gotoxy(10,17);

printf(" viberite punkt menu - ");

v=getch();

f=fopen("result.dat","w");

if (v=='2')

{

printf("\n Rezultaty zapisany\n");

printf(" v fail - rezult.dat\n");

vivod (m,n,k,b,e,d,d1,u);

getch();

}

if (v=='1')

{

clrscr();

vivod_ekran(m,n,k,b,e,d,d1,u);

printf("Press Enter please");

getch();

}

}

break;

}

case '5':

{

clrscr();

gotoxy(5,5);

printf("EXIT\n");

printf("Press Enter please");

break;

}

}}

getch();

}

5. Разработка программы

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

FILE *f;

int b[20][20],e[20][20],d[20][20],d1[20][20];int u[20];int m,s,k,n,j,x,y,z,max,flag;

char l,v,r; int b1,b2;

void vvod_rand(int m,int n,int k,int b[20][20],int e[20][20])

{

int i,j;

randomize();

for(i = 1; i <= m; i++)

for(j = 1; j <= k; j++)

b[i][j] = rand() % 10-7;

for(i = 1; i <= k; i++)

for(j = 1; j <= n; j++)

e[i][j] = rand() % 10-7;

}

void vvod_ekran(int m,int n,int k,int b[20][20],int e[20][20])

{

int i,j;

printf("Vvedite m, n, k : \n");

scanf("%d %d %d", m, n, k);

printf("Vvedite matricu m x k :\n");

for(i = 1; i <= m; i++)

for(j = 1; j <= k; j++)

scanf("%d", &b[i][j]);

printf("Vvedite matricu k x n :\n");

for(i = 1; i <= k; i++)

for(j = 1; j <= n; j++)

scanf("%d", &e[i][j]);

getch();

}

void vvod_file(int n,int k,int b[20][20],int e[20][20])

{

char s[10];

int c,i,j;

printf("kakoi file otkroem dlya sozdaniya matricy b:");scanf("%s",&s);

f=fopen(s,"r");

i=1;

while(!feof(f))

{

for (j=1;j<=k;j++)

{

fscanf(f,"%d",&c);

b[i][j]=c;

}

i=i+1;

}

fclose(f);

printf("kakoi file otkroem dlya sozdaniya matricy e:");scanf("%s",&s);

f=fopen(s,"r");

i=1;

while(!feof(f))

{

for (j=1;j<=n;j++)

{

fscanf(f,"%d",&c);

e[i][j]=c;

}

i=i+1;

}

fclose(f);

}

void form_d(int m,int n,int k,int b[20][20],int e[20][20])

{

int i,j,l;

for(i = 1; i <= m; i++)

for(j = 1; j <= n; j++)

{

d[i][j]=0;

for(l = 1; l <= k; l++)

d[i][j]=b[i][l]*e[l][j];

}}

void form_u(int m,int n,int d[20][20],int u[20])

{

int i,j,s;

for(j = 1; j <= n; j++)

{

s=0;

for(i = 1; i <= m; i++)

{if (d[i][j]<0)

s+=d[i][j];

u[j]=s;

}

}

}

void max_j(int u[20],int n,int max)

{

int j;

max=-1000;x=0;

for (j = 1; j <= n; j++)

if ((u[j]>max)&&(u[j]<0))

{max=u[j];

x=j;}

}

void vivod_ekran_mas(int m,int u[20])

{

int i;

for (i=1;i<=m;i++)

printf("%3d",u[i]);

}

void yporyadochivanie(int m,int x,int d1[20][20])

{int y,i,z;

for (y=2;y<=m;y++)

for (i=m;i>=y;i--)

if (d1[i][x]>d1[i-1][x])

{

z=d1[i][x];

d1[i][x]=d1[i-1][x];

d1[i-1][x]=z;

}

}

void vivod_ekran_matr(int m,int n,int d[20][20])

{

int i,j;

printf("\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=n;j++)

printf("%3d",d[i][j]);

printf("\n");

}

}

void vivod (int m,int n,int k,int b[20][20],int e[20][20],int d[20][20],int d1[20][20],int u[20])

{

int i,j;

f=fopen("result.dat","w");

fprintf(f,"programmu razrabotala:\n");

fprintf(f,"Gayvoronskaya Vicktoria, gr.S-89,fac.MRM\n");

fprintf(f,"SibSUTI, 2009\n\n");

fprintf(f,"Zadanie na kursovuyu rabotu:\n");

fprintf(f,"Sozdat matrici B,E razmerom po viboru polzovatelya:\n");

fprintf(f,"sluchainim obrazom, schitat iz faila, vvesti s klaviatury\n");

fprintf(f,"Poluchit massiv D putem ymnogeniya matrici B[m,k] na matricy E[k,n]\n");

fprintf(f,"Opredelit v rezultirujuchej matrice stolbec c naibolshej symmoj otricatelnih elementov\n");

fprintf(f,"Yporadochit etot stolbec po ubivaniju\n");

fprintf(f,"Vivesti rezultaty po viboru na ekran,printer,v file\n");

fprintf(f,"Sozdat module s procedurami realizacii vseh ukazannih voprosov\n");

fprintf(f,"Razrabotat programmniy interface\n\n");

fprintf(f,"Rezultaty raboty\n\n");

fprintf(f,"Ishodnie matrici\n\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=k;j++)

fprintf(f,"%3d",b[i][j]);

fprintf(f,"\n");

}

for (i=1;i<=k;i++)

{

for (j=1;j<=n;j++)

fprintf(f,"%3d",e[i][j]);

fprintf(f,"\n");

}

fprintf(f,"\nMtrica d[m][n] putem ymnojenija b[m][k] na e[k][n]\n\n");

for (i=1;i<=m;i++)

for (j=1;j<=n;j++)

fprintf(f,"%3d",d[i][j]);

fprintf(f,"\nMassiv u - naibolshaja summa otricatelnih elementov v matr D\n");

fprintf(f,"\n");

for (i=1;i<=m;i++)

fprintf(f,"%3d\n",u[i]);

fprintf(f,"\nUporadichevanie po ubivaniju\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=n;j++)

fprintf(f,"%3d",d1[i][j]);

fprintf(f,"\n");

}

fclose(f);

}

void vivod_ekran (int m,int n,int k,int b[20][20],int e[20][20],int d[20][20],int d1[20][20],int u[20])

{

int i,j;

printf("programmu razrabotala:\n");

printf("Gayvoronskaya Vicktoria, gr.S-89,fac.MRM\n");

printf("SibSUTI, 2009\n\n");

printf("Zadanie na kursovuyu rabotu:\n");

printf("- Sozdat matrici B,E razmerom po viboru polzovatelya:\n");

printf("sluchainim obrazom, schitat iz faila, vvesti s klaviatury\n");

printf("- Poluchit massiv D putem ymnogeniya matrici B[m,k] na matricy E[k,n]\n");

printf("- Opredelit v rezultirujuchej matrice stolbec c naibolshej symmoj otricatelnih elementov\n");

printf("- Yporadochit etot stolbec po ubivaniju\n");

printf("- Vivesti rezultaty po viboru na ekran,printer,v file\n");

printf("- Sozdat module s procedurami realizacii vseh ukazannih voprosov\n");

printf("- Razrabotat programmniy interface\n\n");

printf("Rezultaty raboty\n\n");

printf("Ishodnie matrici\n\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=k;j++)

printf("%3d",b[i][j]);

printf("\n");

}

for (i=1;i<=k;i++)

{

for (j=1;j<=n;j++)

printf("%3d",e[i][j]);

printf("\n");

}

printf("\nMatrica d[m][n] putem ymnojenija b[m][k] na e[k][n]\n\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=n;j++)

printf("%3d",d[i][j]);

printf("\n");

}

printf("\nMassiv u - naibolshaja summa otricatelnih elementov v matr D\n");

for (i=1;i<=m;i++)

printf("%3d",u[i]);

printf("\n");

printf("\nUporadichevanie po ubivaniju\n");

for (i=1;i<=m;i++)

{

for (j=1;j<=n;j++)

printf("%3d",d1[i][j]);

printf("\n");

}

}

void main()

{

l='0';

while (l!='5')

{

clrscr();

gotoxy(18,6);

printf("Menu");

gotoxy(5,12);

printf("1.Vvod razmerov matricbI");

gotoxy(5,9);

printf("0. Zadanie i informaciya o razrabot4ike");

gotoxy(5,15);

printf("2.Vvod matricbI");

gotoxy(5,18);

printf("3.Obrabotka matricbI");

gotoxy(5,21);

printf("4.VbIvod matricbI");

gotoxy(5,24);

printf("5.VbIxod");

gotoxy(7,27);

printf(" vbIberite punkt punkt - ");

l=getch();

switch(l)

{

case '0':

{

clrscr();

printf("RAZRABOTCHIK: \n");

printf("\n");

printf("Gayvoronskaya Vicktoria, gr.S-89, Fakultet MRM ");

printf("\n");

printf("SibSUTI, 2009");

printf("\n");

printf(" Zadanie na kyrsovyy raboty:");

printf("\n");

printf("- Sozdat matrici B,E razmerom po viboru polzovatelya:\n");

printf("- sluchainim obrazom, schitat iz faila, vvesti s klaviatury\n");

printf("- Poluchit massiv D putem ymnogeniya matrici B[m,k] na matricy E[k,n]\n");

printf("- Opredelit v rezultirujuchej matrice stolbec c naibolshej symmoj otricatelnih elementov\n");

printf("- Yporadochit etot stolbec po ubivaniju\n");

printf("- VbIvesti rezultatbI po vbIbory na ekran, printer libo v fail");

printf("\n");

printf(" - Sozdatb modul s procedyrami realizacii vsex ykazannbIx voprosov");

printf("\n");

printf(" - Razrabotat programmnbIi interfeis");

printf("\n");

printf("Press Enter please");

getch();

break;

}

case '1':

{

clrscr();

gotoxy(5,5);

printf("vvedite kol strok matricy b: \n");

scanf("%d",&m);

printf("vvedite kol stolbcov matricy b: \n");

scanf("%d",&k);

printf("vvedite kol strok matricy e: \n");

scanf("%d",&k);

printf("vvedite kol stolbcov matricy e: \n");

scanf("%d",&n);

flag=1;

gotoxy (10,15);

printf(" Enter -dalshe\n");

getch();

break;

}

case '2':

{

clrscr();

if (flag!=1)

{

clrscr();

gotoxy(5,5);

printf ("vvedire razmeri matryc\n");

gotoxy (10,8);

printf (" Enter - Dalee\n");

getch();

}

if (flag==1)

{

clrscr();

gotoxy(5,5);

printf("Vvod matricy");

gotoxy(7,8);

printf("1. Random matr");

gotoxy(7,11);

printf("2. S klaviaturi");

gotoxy(7,14);

printf("3. Zapolnenie matricy iz faila");

gotoxy(7,17);

printf(" vash vibor punkta menu - ");

r=getch();

switch (r)

{

case '1':

{

vvod_rand(m,n,k,b,e); flag=2;

printf("\n");

printf("\n");

vivod_ekran_matr(m,k,b);

printf("\n");

vivod_ekran_matr(k,n,e);

printf("\n");

printf(" Enter - Dalee\n");

getch();

break;

}

case '2':

{

clrscr();

vvod_ekran (m,n,k,b,e); flag=2;

printf("\n");

printf("\n");

vivod_ekran_matr(m,k,b);

printf("\n");

vivod_ekran_matr(k,n,e);

printf("\n");

printf(" Enter - Dalee\n");

getch();

break;

}

case '3':

{

clrscr();

vvod_file (n,k,b,e); flag=2;

printf("\n");

printf("\n");

vivod_ekran_matr(m,k,b);

printf("\n");

vivod_ekran_matr(k,n,e);

printf("\n");

printf(" Enter - Dalee\n");

getch();

break;

}

}

}

break;

}

case '3':

{

if (flag!=2)

{

clrscr();

gotoxy(5,5);

printf("Zadaite matricu");

gotoxy(5,11);

printf(" Enter - Dalee");

getch();

}

else

{

clrscr();

printf("ishodnaya matrica\n\n");

vivod_ekran_matr(m,k,b);

vivod_ekran_matr(k,n,e);

printf(" Enter - Dalee\n");

getch();

form_d(m,n,k,b,e);

printf("\n");

printf("Sphormirovannaja matrica \n");

vivod_ekran_matr(m,n,d);

printf("\n");

form_u(m,n,d,u);

vivod_ekran_mas(m,u);

printf("\n");

max_j(u,n,max);

printf("Stolbec j - naibolshaja summa otricatelnih elementov v matrice: %d", x);

printf("\nUporadichevanie - uporadichevanie po ubivaniju\n");

for (b1=1;b1<=m;b1++)

for (b2=1;b2<=n;b2++)

{d1[b1][b2]=d[b1][b2];}

yporyadochivanie(m,x,d1);

vivod_ekran_matr(m,n,d1);

flag=3;

printf(" Enter - Dalee\n");

getch();

}

break;

}

case '4':

{

clrscr();

if (flag!=3)

{

clrscr();

gotoxy(5,5);

printf("punkt predydushii nado vipolnit");

gotoxy(10,8);

printf(" Enter - Dalee");

getch();

}

else

{

clrscr();

gotoxy(5,5);

printf("Vivod rezultatov");

gotoxy(7,8);

printf("1. Na ekran");

gotoxy(7,11);

printf("2. V fail");

gotoxy(7,14);

printf("3. Na printer");

gotoxy(10,17);

printf(" viberite punkt menu - ");

v=getch();

f=fopen("result.dat","w");

if (v=='2')

{

printf("\n Rezultaty zapisany\n");

printf(" v fail - rezult.dat\n");

vivod (m,n,k,b,e,d,d1,u);

getch();

}

if (v=='1')

{

clrscr();

vivod_ekran(m,n,k,b,e,d,d1,u);

printf("Press Enter please");

getch();

}

}

break;

}

case '5':

{

clrscr();

gotoxy(5,5);

printf("EXIT\n");

printf("Press Enter please");

break;

}

}}

getch();

}

6. Результаты программы

Исходные матрицы

-5 -3 1

2 2 -2

-1 1

-6 -7

-4 -1

Матрица d[m][n] путем умножения b[m][k] на e[k][n]:

-4 -1

8 2

Массив u - наибольшая сумма отрицательных элементов в матрице d

-4 -1

Упорядочивание по убыванию

-4 2

8 -1

Заключение

На основе проделанной работы можно сделать следующие выводы:

1) Си - отличный язык для изучения основ программирования. Они включает в себя структуры, которые впоследствии пригодятся при программировании на других языках высокого уровня.

2) Создание библиотек подпрограмм - наиважнейшая функция в среде Си. Принцип программирования, который основан на применении подпрограмм, позволяет решить комплекс однотипных задач при применении заранее описанных действий.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.