Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная работа №2 по ОАиП (вариант 10).doc
Скачиваний:
12
Добавлен:
01.04.2014
Размер:
778.24 Кб
Скачать

Содержание

Задание на разработку …………………………………………………………2-8

Блок-схемы программ ………………………………………………………...9-16

Интерфейс работы программ………………………………………………..17-23

Список использованных источников…………………………………………...24

Задание на разработку

Задание 1.

Разработать приложение, выполняющее следующие функции. Ввести с клавиатуры значения элементов символьного двумерного массива. Отсортировать по возрастанию (методом выбора) элементы тех строк, которые содержат символ «/». Результат вывести на экран и записать в файл.

#include <stdio.h>

#include <conio.h>

#define ROW 3 /* можно изменить */

#define COL 3 /* можно изменить */

#define FILENAME 64

int main(void)

{

int i, j, k, fl;

char mas[ROW][COL], tmp, fileName[FILENAME];

FILE *f;

puts("Itsakov Vadim\nGroup 002301");

puts("\n\nVvedite elementi massiva razmerom 3x3:\n");

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

for (j = 0; j < COL; j++) {

printf("mas[%d][%d] = ", i + 1, j + 1);

fflush(stdin);

scanf("%c", &mas[i][j]);

}

printf("\n\nMassiv pered sortirovkoi:\n\n");

for (i = 0; i < ROW; i++) {

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

printf("%2c", mas[i][j]);

putchar('\n');

}

for (k = 0; k < ROW; k++) {

fl = 1;

for (i = 0; i < COL && fl; i++)

if (mas[k][i] == '/')

fl = 0;

if (!fl) {

for (i = 0; i < COL - 1; i++)

for (j = i + 1; j < COL; j++)

if (mas[k][i] > mas[k][j]) {

tmp = mas[k][i];

mas[k][i] = mas[k][j];

mas[k][j] = tmp;

}

}

}

printf("\n\nOtsorterovaniy massiv:\n\n");

for (i = 0; i < ROW; i++) {

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

printf("%2c", mas[i][j]);

putchar('\n');

}

printf("\n\nVvedite imya faila dlya sohranenya rezultata: ");

fflush(stdin);

gets(fileName);

if (f = fopen(fileName, "w")) {

fprintf(f, "\n\nOtsortirovaniy massiv:\n\n");

for (i = 0; i < ROW; i++) {

fprintf(f, " ");

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

fprintf(f, "%2c", mas[i][j]);

putc('\n', f);

}

if (fclose(f) == EOF)

printf("\n\nOshibka zakritiya faila!\n");

else

printf("\n\n Done!\n");

}

else

printf("\n\nNevernoe imya faila!\n");

printf("\n\n Nazhmite Enter...");

getch();

return 0;

}

Задание 2.

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

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define NAMELEN 64

typedef struct Taxpayer {

char name[NAMELEN];

int tax, day, month, year;

struct Taxpayer *next;

} taxpayer;

typedef struct ListInf {

taxpayer *beg, *end;

} listInf;

void addition(listInf *);

void deletion(listInf *);

void editing(listInf *);

void printing(listInf *);

int main(void)

{

char choice = '*';

listInf list;

taxpayer *tmp;

list.beg = list.end = (taxpayer *) malloc(sizeof(taxpayer));

list.beg->next = NULL;

puts("Itsakov Vadim\nGroup 002301");

printf("\n\nDobavit' element v spisok - 1");

printf("\nYdalit' element is spiska - 2");

printf("\nRedaktirovanie elementa - 3");

printf("\nVivod spiska - 4");

printf("\n[ EXIT ] - 0\n\n\n");

do {

printf(" Sdelayte vibor: ");

fflush(stdin);

scanf("%c", &choice);

switch (choice) {

case '1':

addition(&list);

break;

case '2':

deletion(&list);

break;

case '3':

editing(&list);

break;

case '4':

printing(&list);

break;

}

}

while (choice != '0');

while (list.beg) {

tmp = list.beg->next;

free(list.beg);

list.beg = tmp;

}

printf("\n\n Nazhmite Enter...");

getch();

return 0;

}

void addition(listInf *list)

{

list->end->next = (taxpayer *) malloc(sizeof(taxpayer));

list->end = list->end->next;

list->end->next = NULL;

printf(" **************************************************************************\n * Dobavlenie elementa v spisok *\n **************************************************************************\n");

printf(" * FIO: ");

fflush(stdin);

gets(list->end->name);

printf(" * Day: ");

fflush(stdin);

scanf("%d", &list->end->day);

printf(" * Month: ");

scanf("%d", &list->end->month);

printf(" * Year: ");

scanf("%d", &list->end->year);

printf(" * Nalog: ");

scanf("%d", &list->end->tax);

printf(" **************************************************************************\n\n\n");

}

void deletion(listInf *list)

{

int num = 0, pos;

taxpayer *tmp1 = list->beg->next, *tmp2;

while (tmp1) {

num++;

tmp1 = tmp1->next;

}

printf(" **************************************************************************\n * Ydalenie elementa is spiska *\n **************************************************************************\n");

printf(" * Vvedite nomer elementa v diapasone [0; %d], kotoriy nuzhno ydalit': ", num);

fflush(stdin);

scanf("%d", &pos);

if (pos < 0 || pos > num)

printf(" * ERROR: nomer elementa ne v diapasone [0; %d]\n", num);

else

if (pos) {

tmp1 = list->beg;

for (num = 1; num < pos; num++)

tmp1 = tmp1->next;

if (tmp1->next)

tmp2 = tmp1->next->next;

else

tmp2 = NULL;

free(tmp1->next);

tmp1->next = tmp2;

}

printf(" **************************************************************************\n\n\n");

}

void editing(listInf *list)

{

char choice = '*';

int num = 0, pos;

taxpayer *tmp = list->beg->next;

while (tmp) {

num++;

tmp = tmp->next;

}

printf(" **************************************************************************\n * Redaktirovanie elementa is spiska *\n **************************************************************************\n");

printf(" * Vvedite nomer elementa v diapasone [0; %d], kotoriy nuzhno redaktirovat': ", num);

fflush(stdin);

scanf("%d", &pos);

if (pos < 0 || pos > num)

printf(" * ERROR: ERROR: nomer elementa ne v diapasone [0; %d]\n", num);

else

if (pos) {

tmp = list->beg->next;

for (num = 1; num < pos; num++)

tmp = tmp->next;

printf(" * FIO - 1\n * Day - 2\n * Month - 3\n * Year - 4\n * Nalog - 5\n * [ EXIT ] - 0\n *\n");

do {

printf(" * Sdelayte vibor: ");

fflush(stdin);

scanf("%c", &choice);

switch (choice) {

case '1':

printf(" * Vvedite novoe znachenie FIO: ");

fflush(stdin);

gets(tmp->name);

break;

case '2':

printf(" * Vvedite novoe znachenie day: ");

fflush(stdin);

scanf("%d", &tmp->day);

break;

case '3':

printf(" * Vvedite novoe znachenie month: ");

fflush(stdin);

scanf("%d", &tmp->month);

break;

case '4':

printf(" * Vvedite novoe znachenie year: ");

fflush(stdin);

scanf("%d", &tmp->year);

break;

case '5':

printf(" * Vvedite novoe znachenie nalog: ");

fflush(stdin);

scanf("%d", &tmp->tax);

break;

}

}

while (choice != '0');

}

printf(" **************************************************************************\n\n\n");

}

void printing(listInf *list)

{

taxpayer *tmp = list->beg->next;

printf(" **************************************************************************\n * Vivod spiska *\n **************************************************************************");

while (tmp) {

if (tmp != list->beg->next)

printf(" *");

putchar('\n');

printf(" * FIO: %s\n * Day: %d\n * Month: %d\n * Year: %d\n * Nalog: %d\n", tmp->name, tmp->day, tmp->month, tmp->year, tmp->tax);

tmp = tmp->next;

}

if (!list->beg->next)

putchar('\n');

printf(" **************************************************************************\n\n\n");

}