русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Программа для задачи


Дата добавления: 2013-12-24; просмотров: 957; Нарушение авторских прав


#include <stdio.h>//Библиотека функций ввода и вывода

#include <stdlib.h>//Библиотека стандартных функций

int Add(int); //Функция добавления элемента в список

int LoadFile(const char*); //Загрузка списка из файла

int SaveFile(const char*); //Запись списка в файл

void Destroy(void); //Удаление списка

/* --------------- Главная функция main --------------- */

int main(int argc, char *argv[])

{

//Если число параметров командной строки не равно двум,

if(argc != 2){//то вывод сообщения и выход

puts("Неправильное число параметров!");

return 0;

}

int res = LoadFile(argv[1]); //Загрузка списка из файла

if(res){//Если произошла ошибка

if(res==1){//открытия файла

puts("Не удалось открыть файл!"); //Вывод сообщения

return 0; //Выход

}else{//недостаточно памяти

puts("Мало памяти! Продолжить (y/n)?"); //Сообщение

char ch; //Локальная переменная

do{ //Цикл, пока не будет введен один из символов

scanf("%c",&ch); //Чтение символа

if((ch=='n')||(ch=='N')){//Отрицательный ответ

Destroy(); //Удаление списка

return 0; //Выход

}

}while((ch!='y')||(ch!='Y'));//Положительный ответ

}

}

//Запись списка в файл и анализ результата

if(!SaveFile(argv[1])) puts("Файл успешно сохранен!");

else puts("Ошибка при записи файла!");

Destroy(); //Удаление списка

return 0; //Выход

}

/* -- Описание структуры и указателя на начало списка -- */

typedef struct _ELEMENT{

int value;

struct _ELEMENT *next;

} ELEMENT;

ELEMENT *head = NULL;

/* ----------- Функция записи списка в файл --------------

Параметры: name - имя файла.

Возвращаемое значение: 0 - успешное завершение,

1 - ошибка записи в файл

-------------------------------------------------------- */



int SaveFile(const char *name)

{

FILE *f = fopen(name,"w"); //Открытие файла для записи

if(!f) return 1; //Если открыть файл не удалось, то выход

//Объявление и установка локального указателя

ELEMENT *tmp = head; //на начало списка

while(tmp){ //Цикл по всему списку

//Если записать значение в файл не удалось, то

if(fprintf(f,"%d\n",tmp->value) < 0){

fclose(f); //закрытие файла

return 1; //и выход

}

tmp = tmp->next; //Переход к следующему элементу

}

fclose(f); //Закрытие файла

return 0; //Успешное завершение

}

/* ----------- Функция загрузки списка из файла -----------

Параметры: name - имя файла.

Возвращаемое значение: 0 - успешное завершение,

1 - ошибка открытия файла,

2 - нехватка памяти

-------------------------------------------------------- */



int LoadFile(const char*name)

{

FILE *f = fopen(name,"r"); //Открытие файла для чтения

if(!f) return 1; //Если открыть файл не удалось, то выход

int num; //Локальная переменная

//В цикле до конца файла осуществляется чтение по одному

while(fscanf(f,"%d",&num)==1) //значению и помещение его

//в список с обработкой ошибки помещения элемента

if(Add(num)) {fclose(f); return 2;}

fclose(f); //Закрытие файла

return 0; //Выход

}

/* --------- Функция помещения значения в список ----------

Параметры: value - помещаемое значение.

Возвращаемое значение: 0 - успешное завершение,

1 - ошибка выделения памяти

-------------------------------------------------------- */



int Add(int value)

{

//Выделение памяти под новый элемент

ELEMENT *tmp = (ELEMENT*)malloc(sizeof(ELEMENT));

if(!tmp) return 1; //Если память не выделилась, то выход

if(!head){//Если создается первый элемент в списке

//Инициализация указателя на следующий элемент

tmp->next = NULL; //нулевым значением

head = tmp; //Установка указателя на начало списка

//Если новый элемент при соблюдении условия сортировки

//необходимо вставить перед первым элементом списка

}else if(head->value > value){

//Установка указателя на следующий элемент нового

tmp->next = head; //элемента на начало списка

head = tmp; //Установка указателя на начало списка

//Иначе, поиск места, куда необходимо вставить новый

//новый элемент не нарушая условие сортировки

}else{

ELEMENT *cur = head; //Поиск места

while((cur->next)&&(cur->next->value < value))

cur = cur->next;

tmp->next = cur->next; //Вставка нового элемента в

cur->next = tmp; //найденную позицию

}

tmp->value = value; //Запись значения в новый элемент

return 0; //Успешное завершение

}

/* ----------- Функция удаления всего списка ----------- */

void Destroy(void)

{

while(head){ //Пока список не пуст

//Установка локального указателя на начало списка

ELEMENT *tmp = head;

//Установка указателя на начало списка на следующий

head = head->next; //элемент

free(tmp); //Освобождение динамической памяти

}

}

Задача 9.2: Дан текстовый файл, содержащий вещественные числа (имя файла передается в параметрах командной строки). Если положительных чисел в файле больше (или равно) чем отрицательных, то удалить все отрицательные числа. В противном случае - все положительные. Оставшиеся значения упорядочить по возрастанию и записать в исходный файл (файл переписывается заново). При реализации использовать двунаправленный список.



<== предыдущая лекция | следующая лекция ==>
Алгоритм RC4 | 


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.125 сек.