Главная страница

Методичка по С. Методические указания к лабораторному практикуму по дисциплине Программирование на языках высокого уровня (язык Си) москва 2005


Скачать 429.5 Kb.
НазваниеМетодические указания к лабораторному практикуму по дисциплине Программирование на языках высокого уровня (язык Си) москва 2005
АнкорМетодичка по С.doc
Дата23.09.2018
Размер429.5 Kb.
Формат файлаdoc
Имя файлаМетодичка по С.doc
ТипМетодические указания
#25022
КатегорияИнформатика. Вычислительная техника
страница5 из 6
1   2   3   4   5   6

Пример решения задачи



Задача 5. Сформировать стек, содержащий данные о стульях. Удалить из него все стулья, производимые в данном городе. Результат записать в файл.
#include

#include

#include

#include

#include
#define Lmax 20

#define STUL struct stu
#define CLR while(fgetc(f)!='\n')
STUL

{char cvet[Lmax]; int visota;

struct{ char city[Lmax],zavod[Lmax],fam[Lmax];}

izgot;

char mater[Lmax];

STUL *next;//поле указателя на следующую запись

};
//формирование стека стульев. На входе - имя входного файла

STUL*stack(char name[])

{ STUL *tek,*stack=NULL;//изначально список пуст

FILE *f;
if(!(f=fopen(name,"r")))

puts("Файл не найден");

else

{

while(!feof(f))

{ //выделение памяти для новой записи

tek=(STUL*)malloc(sizeof(STUL));

if(fgets(tek->cvet,Lmax,f))

{ //другой способ замены '\n' на '\0'

tek->cvet[strlen(tek->cvet)-1]='\0';

fscanf(f,"%d",&tek->visota);

CLR;

fgets(tek->izgot.city,Lmax,f);

tek->izgot.city[strlen(tek->izgot.city)-1]='\0';

fgets(tek->izgot.zavod,Lmax,f);

tek->izgot.zavod[strlen(tek->izgot.zavod)-1]='\0';

fgets(tek->izgot.fam,Lmax,f);

tek->izgot.fam[strlen(tek->izgot.fam)-1]='\0';

fgets(tek->mater,Lmax,f);

tek->mater[strlen(tek->mater)-1]='\0';

tek->next=stack;

stack=tek;

}}

free(tek);

}

return(stack);//возвращается указатель на вершину стека

}
void vivod(STUL* stack, char name[])//вывод списка в файл

{FILE *f2=fopen(name,"w");
if (!stack)

{fprintf(f2," список после удаления пуст\n");

}

else

{

fprintf(f2," список после удаления\n");

//вывод списка в файл

while(stack!=NULL)

{

fprintf(f2,"cvet:%s\n",stack->cvet);

fprintf(f2,"visota:%d\n",stack->visota);

fprintf(f2,"city:%s\n",stack->izgot.city);

fprintf(f2,"zavod:%s\n",stack->izgot.zavod);

fprintf(f2,"fam:%s\n",stack->izgot.fam);

fprintf(f2,"mater:%s\n",stack->mater);

stack=stack->next;//движение по списку

}

}

fclose(f2);

}
STUL* del(STUL* stack)//удаление стульев

// Результат – указатель на вершину измененного списка

{STUL *tek,*pred;//указатели на текущую и предшествующую запись

char gor[Lmax];//заданный город
printf("введите город");

gets(gor);

tek=pred=stack;

while(stack && tek)//пока список не кончился и не удален полностью

if(strcmp(gor,tek->izgot.city)==0)

{ if(tek==stack)//удаление первой записи

{ stack=stack->next;

free(tek);

tek=pred=stack;

}

else //удаление элемента из середины

{ pred->next=tek->next;

free(tek);

tek=pred->next;

}

}

else//движение по списку

{ pred=tek;

tek=tek->next;

}

return(stack);

}
void main()

{STUL *first;//указатель на вершину стека

char name1[Lmax],name2[Lmax];//имена входного и выходного файла
printf("введите имя входного файла:");

gets(name1);

printf("введите имя выходного файла:");

gets(name2);

first=stack(name1);//формирование стека

if(first!=NULL)

{ first=del(first);//удаление записей

vivod(first,name2);//вывод результата в файл

printf("результат находится в файле %s\n",name2);

}

getch();

}
    1. Лабораторная работа 6. "Рекурсия"



I. Написать программу, включающую рекурсивную функцию для вычисления:


    1. НОД двух неотрицательных целых чисел m и n с использованием второго алгоритма Евклида:






    1. НОД двух неотрицательных целых чисел m и n с использованием первого алгоритма Евклида:






3. Биноминального коэффициента С(m,n), где 0  nm по формуле:
C(m, 0) = C(n, n) = 1,

C(m, n) = C(m - 1, n) + C(m - 1, n - 1) при 0 < n < m.
4. Величины Pow(x,n) для вещественного х 0 и целого n по формуле:




5. Функции Аккермана A(n,m) для неотрицательных целых чисел n и m по формуле:




6. Числа Каталана K(n) для натурального n по формуле:
K(1) = K(2) = 1,

K(n) = K(n - 1)  (4  n - 6) / n , при n  3.
7. Функции F(n) для целого положительного n по формуле:




II. Написать программу, которая создает бинарное дерево, состоящее из целых чисел, вводимых с клавиатуры, выполняет преобразования в соответствии с номером задания и печатает все числа исходного и преобразованного бинарного дерева:

  1. удаляет из бинарного дерева все числа, меньшие заданного;

  2. удаляет из бинарного дерева все числа, равные заданному;

  3. находит наиболее часто встречающееся число в бинарном дереве;

  4. находит максимальное число в бинарном дереве;

  5. удаляет однодетных отцов в бинарном дереве;

  6. удаляет листья в бинарном дереве;

  7. находит число, ближайшее к среднему арифметическому минимального и максимального чисел в бинарном дереве;

  8. формирует новое бинарное дерево, состоящее из листьев исходного дерева;

  9. формирует новое бинарное дерево, состоящее из отрицательных чисел исходного дерева.



Таблица 3


Выбор варианта

    1. 1   2   3   4   5   6


написать администратору сайта