
- •Структура билета
- •Подпрограммы обработки списков
- •Int CreateList (struct list **p )
- •Void PrintList (struct list *p)
- •Int inf_1_el (inf_type *X, struct list *s)
- •Int kz; // Код завершения функции: 0 - успех, 1 - неудача
- •Inf_type rez; // Результат - значение 1-го элемента
- •Int inf_k_el (inf_type *X, int k, struct list *p)
- •Inf_type rez; // Результат - значение k-го элемента
- •Int k; // Номер искомого элемента
- •Int inf_k_el (inf_type *x1, inf_type *x2, int k, struct list2 *p)
- •Inf_type rez1, rez2; // Вставить описания необходимых величин
- •Int k; // Номер искомого элемента
- •Int inf_k_el (inf_type *X, int k, struct list *p)
- •Inf_type rez; // Вставить описания необходимых величин
Int inf_k_el (inf_type *x1, inf_type *x2, int k, struct list2 *p)
{ struct LIST2 *i; // Указатель текущего элемента
for (i=p; k>1 && i!=NULL; k--)
i = i->next; // Переход к следующему элементу
if (k==1 && i!=NULL) // p указывает на k-й элемент
{ *x1 = i->INF1_;
*x2 = i->INF2_;
return 0; // Успешное завершение
}
else return 1; // Неудача: в списке нет k-го элемента
}
int main()
{ struct LIST2 *p; // указатель списка
int ExitCode; // Код завершения 0 - успех, 1 - неудача
Inf_type rez1, rez2; // Вставить описания необходимых величин
Int k; // Номер искомого элемента
if ((fin=fopen("input.txt","r"))==NULL)
{ puts ("File input.txt is not found"); return 1; }
if ((fout=fopen("output.txt","w"))==NULL)
{ puts ("File output.txt is not opened"); return 1; }
fscanf(fin, "%d", &k);
CrList2(&p); // создание списка p из значений файла input.txt
// PrList2(p); // Вывод списка p для отладки или решения задачи
ExitCode = inf_k_el(&rez1,&rez2,k,p); // Получение результата rez
fprintf(fout, "%d ", ExitCode); // Вывод кода завершения
if(ExitCode==0) // Успешное завершение
fprintf(fout, F_" "F_, rez1,rez2); // Вывод результата в формате F_
fclose(fout); fclose(fin);
return 0;
}
// P00_7.C Пример решения задачи (вместе с файлом LISTSE.C)
// Задача 00.7. Составить функцию получения значения k-го элемента
// заданного СПИСКА СЛОВ. Сумма длин слов <= (NMAX - кол-слов).
// Вход ::= K [{пробел|\n|\t}...слово]...EOF Выход ::= 0 слово | 1
// Пример. Вход: 2 a bb ccc EOF Выход: 0 bb
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //* Функции над строками
// РЕШЕНИЕ ЗАДАЧИ 00.7: описание списка и функция (= 00.5)
#define INF_TYPE char * //* ТИП информации ВЫБРАТЬ: int char float char*
#define F_ "%s" //* ФОРМАТ информации ВЫБРАТЬ: %d %c %f %s
#define INF_ Z // имя информации Z можно оставить или заменить
struct LIST // элемент списка
{ INF_TYPE INF_; // информация элемента списка
struct LIST *next; // ссылка на следующий элемент
};
#define NMAX 300 //* Максимум (суммы длин слов + количество слов)
char w[NMAX]; //* ОБЛАСТЬ СЛОВ: слова с \0 в конце слова
INF_TYPE x; // указатель текущего слова в массиве w
FILE *fin, *fout;
#include "LISTSE.c" // Функции создания и вывода списка
Int inf_k_el (inf_type *X, int k, struct list *p)
{ struct LIST *i; // Указатель текущего элемента
for (i=p; k>1 && i!=NULL; k--)
i = i->next; // Переход к следующему элементу
if (k==1 && i!=NULL) // p указывает на k-й элемент
{ *x = i->INF_;
return 0; // Успешное завершение
}
else return 1; // Неудача: в списке нет k-го элемента
}
int main()
{ int ExitCode; // Код завершения: 0 - успех, 1 - неудача
struct LIST *p; // указатель списка
Inf_type rez; // Вставить описания необходимых величин
int k;
x = w; // Указатель 1-го слова в массиве w
fin = fopen("input.txt","r");
if (fin==NULL || (fout=fopen("output.txt","w"))==NULL)
{ puts ("input.txt or output.txt is not opened"); return 1; }
fscanf(fin, "%d", &k);
CreateList(&p); // создание списка p из значений файла input.txt
// PrintList(p); // Вывод списка p для отладки или решения задачи
ExitCode = inf_k_el(&rez, k, p); // Получение результата rez
fprintf(fout, "%d ", ExitCode); // Вывод кода завершения
if(ExitCode == 0) // Успешное завершение
fprintf(fout, F_, rez); // Вывод результата в формате F_
fclose(fout); fclose(fin);
return 0;
}