Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Студентам.

243
30 ноября 2005 года
pacific_7
1.9K / / 06.09.2004
Один хороший знакомый попросил сделать задания из института.
Я не жадный, по мере работ буду выкладывать сюда, может кого спасет.
ЗЫ Если будут недочеты и ляпусы, то просьба не глупо критиковать, а указать точно что и где, т.к. делаю забесплатно, на качество не серчать :)
ЗЫЗЫ Для студентов: написано в MS Visual C++ 7
ЗЫЗЫЗЫ Предлагаю всю конструктивную критику по окончании разбора полетов удалять. Я свои топики уже снёс.
Код:
/*/------------------------------------------------------
Задание:
Описать функцию, которая удаляет из списка за каж-дым вхождением элемента Е, значение которого введено с клавиатуры, один элемент, если такой есть и он отличен от Е.
<--- задание писал не я, таким выдали в инсте, и у меня ощущение, что человек даже русским языком не владеет :) --->
//------------------------------------------------------*/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

//СТРУКТУРА ОДНОГО ЭЛЕМЕНТА СПИСКА
struct list_item
{
    int val;
    list_item *next;
};

//ФУНКЦИЯ ВЫВОДЯЩАЯ РУССКИЕ БУКВЫ В КОНСОЛЬ ДЕЙСТВИТЕЛЬНО РУССКИМИ :)
void rus_out(char *str)
{
    char out_str[255];
    CharToOem(str,out_str);
    printf("%s",out_str);
    return;
}

int main(void)
{
    unsigned int numb;
    list_item *start, *curr;
    rus_out("Введите число элементов в списке: ");
    scanf("%d",&numb);
    if(numb<1)
    {
        rus_out("Введено недопустимое число!\nНажмите любую кнопку для завершения программы\n");
        getch();
        return 1;
    }
    rus_out("Введите элементы списка.\n");
    start=(list_item*)malloc(sizeof(list_item));
    scanf("%d",&(start->val));
    start->next=0;
    numb--;
    //ЕСЛИ ЭЛЕМЕНТОВ БОЛЬШЕ ЧЕМ ОДИН, ТО НАЧИНАЕМ СЧИТЫВАНИЕ СПИСКА
    if(numb)
    {
//      curr=new list_item;
        curr=start;
        for(;numb;numb--)
        {
            curr->next=(list_item*)malloc(sizeof(list_item));
            curr=curr->next;
            scanf("%d",&(curr->val));
            curr->next=0;
        }
    }
   
    //ВЫВОДИМ СПИСОК ДЛЯ КОНТРОЛЯ
    rus_out("Введен список: |");
    curr=start;
    do
    {
        printf(" %d |",curr->val);
        curr=curr->next;
    }while(curr);
    printf("\n");
   
    rus_out("Введите элемент Е: ");
    int E;
    scanf("%d",&E);
    //НАЧИНАЕМ ПОИСК ЭЛЕМЕНТА СОДЕРЖАЩЕГО ДАННОЕ ЗНАЧЕНИЕ
    list_item *next_curr;
    curr=start;
    do
    {
        if(curr->val==E)
        {
            if(curr->next)
            {
                if(curr->val != curr->next->val)
                {
                    next_curr=curr->next->next;
                    free(curr->next);
                    curr->next=next_curr;
                }
            }
        }
        curr=curr->next;
    }while(curr);

    //ВЫВОДИМ СПИСОК ДЛЯ ПРОВЕРКИ УДАЧНОСТИ УДАЛЕНИЯ
    rus_out("Отредактированный список: |");
    curr=start;
    do
    {
        printf(" %d |",curr->val);
        curr=curr->next;
    }while(curr);
    printf("\n");

    //ОСВОБОЖДАЕМ ДИНАМИЧЕСКУЮ ПАМЯТЬ ВЫДЕЛЕННУЮ ПОД СПИСОК
    curr=start;
    do
    {
        start=curr;
        curr=curr->next;
        free(start);
    }while(curr);

    rus_out("Нажмите любую клавишу для завершения программы...\n");
    getch();
    return 0;
}
243
01 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
Код:
/*
Задание: Определить класс-строку. В класс включить два кон-структора: для определения класса строки строкой сим-волов и путем копирования другой строки (объекта клас-са строки).
Определить операции над строками:
>>   перевертывание строки (запись символов в об-ратном порядке);
++    нахождение наименьшего слова в строке.
 
*/
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <iostream.h>

class x_string
{
    char *priv_str;
    bool get_string_from_user;
public:
    x_string(char *str);
    x_string(const x_string &obj);
    ~x_string();
    void input();
    void out();
    char *get();
    void operator>>(char *str);
    char * operator++();
};
#define STRLEN 255


//ФУНКЦИЯ ВЫВОДЯЩАЯ РУССКИЕ БУКВЫ В КОНСОЛЬ ДЕЙСТВИТЕЛЬНО РУССКИМИ
void rus_out(char *str)
{
char out_str[255];
CharToOem(str,out_str);
printf("%s",out_str);
return;
};

//СОЗДАНИЕ ОБЪЕКТА ПО СТРОКЕ
x_string::x_string(char *str)
{
    priv_str=str;
    get_string_from_user=0;
}
//СОЗДАНИЕ ОБЪЕКТА ПРИ ПОМОЩИ КОПИРОВАНИЯ СТРОКИ ИЗ ДРУГОГО ОБЪЕКТА
//ЧЕРЕЗ КОНСТРУКТОР КОПИЙ
x_string::x_string(const x_string &obj)
{
    priv_str=new char[strlen(obj.priv_str)+1];
    memcpy(priv_str,obj.priv_str,strlen(obj.priv_str));
    priv_str[strlen(obj.priv_str)]=0;
    get_string_from_user=0;
}
char * x_string::get()
{
    return priv_str;
}
void x_string::out()
{
    cout<<priv_str<<endl;
}
void x_string::input()
{
    get_string_from_user=1;
    priv_str=new char[255];
    gets(priv_str);
}
x_string::~x_string()
{
    if(get_string_from_user)
        delete[] priv_str;
}

//ПЕРЕГРУЖАЕМ ОПЕРАТОР >>
void x_string::operator >>(char *str)
{
    int i=strlen(priv_str);
    for(--i;i >-1 ;i--)str[strlen(priv_str)-1-i]=priv_str;
    return;
}

//ПЕРЕГРУЖАЕМ ОПЕРАТОР ++
char * x_string::operator++()
{
    if(!strcmp(priv_str,""))return 0;//ЕСЛИ СТРОКА ПУСТАЯ
    unsigned int start_pos=0;//СТАРТОВАЯ ПОЗИЦИЯ САМОГО КОРОТКОГО СЛОВА
    unsigned int word_len=0xFFFFFFFF;//СЛОВ ДЛИННЕЕ УЖ ТОЧНО НЕ БЫВАЕТ
    unsigned int x_len=0;//ПЕРЕМЕННАЯ ДЛЯ ПОДСЧЕТА ДЛИННЫ ТЕКУЩЕГО СЛОВА
    //НАЧИНАЕМ ПОИСК САМОГО КОРОТКОГО СЛОВА
    for(int i=0;i<=strlen(priv_str);i++)
    {
        if(priv_str==' ' || priv_str=='\0')//СЛОВО ЗАКОНЧИЛОСЬ ЕСЛИ ВСТРЕТИЛСЯ
                                                 //ПРОБЕЛ ЛИБО КОНЕЦ СТРОКИ.
        {   //СРАВНИВАЕМ ЕГО ДЛИННУ С ДЛИННОЙ ПРЕДЫДУЩЕГО СЛОВА
            if((x_len < word_len) && (x_len !=0))//И ЕСТЬ ЛИ ВООБЩЕ У НЕГО ДЛИННА
            {
                word_len=x_len;
                start_pos=i - x_len;//ВЫЧИСЛЯЕМ СТАРТОВУЮ ПОЗИЦИЮ НАШЕГО СЛОВА
            }
            x_len=0;//ОБНУЛЯЕМ СЧЕТЧИК ДЛИННЫ ДЛЯ СЛЕДУЮЩЕГО СЛОВА
        }
        else x_len++;
    }
    if(word_len==0xFFFFFFFF && !start_pos)return 0;//ВВЕЛИ СПЛОШНЫЕ ПРОБЕЛЫ
    char *word=new char[word_len+1];//БУФЕР В КОТОРОМ БУДЕТ ВОЗВРАЩЕНО САМОЕ КОРОТКОЕ СЛОВО
    memset(word,0,word_len+1);//ОЧИЩАЕМ ЕГО
    memcpy(word,&priv_str[start_pos],word_len);//КОПИРУЕМ ИЗ ИСХОДНОЙ СТРОКИ В ВОЗВРАЩАЕМУЮ
    return word;//ГОТОВО
}

int main()
{
    rus_out("Введите строку: ");
    x_string obj1("");
    obj1.input();//ВВОДИМ СТРОКУ В ПЕРВЫЙ ОБЕКТ
    x_string obj2(obj1);//ИНИЦИАЛИЗИРУЕМ ВТОРОЙ ЗНАЧЕНИЕМ ИЗ ПЕРВОГО

    char *str=new char[STRLEN];
    memset(str,0,255);
   
    rus_out("Перевернутая строка: ");
    obj1>>str;//ПЕРЕВОРАЧИВАЕМ НАШУ ИСХОДНУЮ СТРОКУ В ПЕРЕМЕННУЮ str
    cout<<str<<endl;

    //ИЩЕМ САМОЕ КОРОТКОЕ СЛОВО В СТРОКЕ ИЗ ОБЕКТА 2
    if(!obj2++)
        rus_out("Пустая строка!\n");
    else
    {
        rus_out("Самое короткое слово в строке: ");
        cout<<obj2++<<endl;
    }
    return 0;
}

ЗЫ В плюсах я совсем слаб, по этому буду благодарен за конструктивные предложения.
243
02 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
Код:
/*
Определить класс-строку. В класс включить два кон-структора: для определения класса строки строкой сим-волов и путем копирования другой строки (объекта клас-са строки). Предусмотреть функции поиска слова в стро-ке и добавления другой строки, начиная с позиции N
*/
#include <iostream.h>
#include <windows.h>
#include <string.h>
#include <stdio.h>

//ФУНКЦИЯ ВЫВОДЯЩАЯ РУССКИЕ БУКВЫ В КОНСОЛЬ ДЕЙСТВИТЕЛЬНО РУССКИМИ
void rus_out(char *str)
{
    char out_str[255];
    CharToOem(str,out_str);
    printf("%s",out_str);
    return;
};
//ФУНКЦИЯ ПРЕОБРАЗУЮЩАЯ РУССКИЕ БУКВЫ В char
char *rus_in(void)
{
    char in_str[255];
    char ret_str[255];
    scanf("%s",in_str);
    OemToChar(in_str,ret_str);
    return ret_str;
};

//ОБЪЯВЛЯЕМ КЛАСС-СТРОКУ
class x_string
{
    char *priv_str;
    bool get_string_from_user;
public:
    x_string(char *str);
    x_string(const x_string &obj);
    ~x_string(){if(get_string_from_user)delete[] priv_str;}
    void input();//ВВОД С КЛАВИАТУРЫ
    void out();//ВЫВОД НА ЭКРАН
    char *get();//ВОЗВРАЩЕНИЕ ЗНАЧЕНИЯ СТРОКИ
    int search(char *word);//ПОИСК СЛОВА В СТРОКЕ
    void insert(char *fragm, int pos);//ДОБАВЛЕНИЕ ФРАГМЕНТА В СТРОКУ
};

//СОЗДАНИЕ ОБЪЕКТА ПО СТРОКЕ
x_string::x_string(char *str)
{
    priv_str=str;
    get_string_from_user=0;
}
//СОЗДАНИЕ ОБЪЕКТА ПРИ ПОМОЩИ КОПИРОВАНИЯ СТРОКИ ИЗ ДРУГОГО ОБЪЕКТА
x_string::x_string(const x_string &obj)
{
    priv_str=new char[strlen(obj.priv_str)+1];
    memcpy(priv_str,obj.priv_str,strlen(obj.priv_str));
    priv_str[strlen(obj.priv_str)]=0;
    get_string_from_user=0;
}
void x_string::input()
{
    get_string_from_user=1;
    priv_str=new char[255];
    char *buf=new char[255];
    gets(buf);
    OemToChar(buf,priv_str);
    delete [] buf;
}
void x_string::out()
{
    char *buf=new char[255];
    CharToOem(priv_str,buf);
    cout<<buf<<endl;
    delete [] buf;
}

char * x_string::get()
{
    return priv_str;
}

//ФУНКЦИЯ ПОИСКА СЛОВА В СТРОКЕ
int x_string::search(char *word)
{
    char *begin_str=strstr(priv_str,word);
    if(begin_str)
    {
        //ВЫСЧИТЫВАЕМ НОМЕР ПОЗИЦИИ С КОТОРОЙ НАЧИНАЕТСЯ СЛОВО
        //ПРИ ПОМОЩИ РАЗНОСТИ АДРЕСОВ УКАЗАТЕЛЕЙ
        return ((begin_str-priv_str)/sizeof(char));
    }
    return -1; 
}

//ЯРКИЙ ПРИМЕР ПЛОХОГО СТИЛЯ ПРОГРАММИРОВАНИЯ
//ТАК ПРОГРАММИРОВАТЬ НЕ НАДО, НО ПЕРЕДЕЛЫВАТЬ МНЕ УЖЕ ЛЕНЬ
//ФУНКЦИЯ ВСТАВЛЯЕТ/ДОБАВЛЯЕТ СТРОКУ
void x_string::insert(char *fragm, int pos)
{
    int full_len=strlen(priv_str) + strlen(fragm) + 1;
    char *buf=new char[full_len];
    memset(buf,0,full_len);
    memcpy(buf,priv_str,pos-1);
    memcpy(buf+pos-1,fragm,strlen(fragm));
    memcpy(buf + (pos-1) + strlen(fragm), priv_str + pos - 1, strlen(priv_str)- pos + 1);
    if(get_string_from_user)delete [] priv_str;
    priv_str=buf;
}

int main()
{
    x_string obj1(""), obj2("");
    int pos;
    rus_out("Введите строку: ");
    obj1.input();
    rus_out("Введите слово для добавления/вставки: ");
    obj2.input();
    rus_out("Введите позицию с которой нужно вставить слово: ");
    cin>>pos;
    if(pos>strlen(obj1.get()))
    {
        rus_out("Введено число больше чем длинна строки, строка будет добавлена в конец:\n");
        pos=strlen(obj1.get())+1;
    }
    else
        if(pos<1)
        {
            rus_out("Т.к. значение меньше допустимого, то строка будет вставлена в начало:\n");
            pos=1;
        }
    obj1.insert(obj2.get(),pos);
    obj1.out();
    rus_out("Введите строку в которой будет произведен поиск: ");
    obj1.input();
    rus_out("Введите искомое слово: ");
    char *buf=rus_in();
    pos=obj1.search(buf);
    if(pos==-1)rus_out("Указанное слово не найдено\n");
    else
    {
        rus_out("Позиция слова: ");
        cout<<pos+1;
    }
    cout<<endl;
    return 0;
}
243
13 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
Код:
/*Составить программу, описывающую домашнюю библиотеку из N книг
(задаётся с клавиатуры) вида: автор, название, год издания, и
выводящую на экран все книги нужного автора в библиографическом
порядке(по году издания).*/

#include <windows.h>
#include <stdio.h>
#include <conio.h>

struct book
{
    char avtor[255];    //ФИО АВТОРА
    char caption[255];  //НАЗВАНИЕ КНИГИ
    int year;           //ГОД ИЗДАНИЯ
};

void rus_out(char *str);
bool sort_out(book *list, u_int numb, char *avtor);

int main(void)
{
    u_int book_number=0;
    rus_out("Введите количество книг: ");
    scanf("%u",&book_number);
    char avtor[255]="";
    book *list=new book[book_number];
    rus_out("Введите данные о книгах.\n");
    for(u_int i=0;i<book_number;i++)
    {
        rus_out("Книга №"),printf("%d\n",i+1);
        rus_out("Введите фамилию автора: ");scanf("%s",&list.avtor);
        rus_out("Введите название книги: ");scanf("%s",&list.caption);
        rus_out("Введите год издания: ");scanf("%d",&list.year);
    };
    rus_out("Введите имя автора книги которого требуется найти: ");
    scanf("%s",&avtor);
    sort_out(list,book_number,avtor);
    rus_out("Программа выполнена. Нажмите любую кнопку для завершения.\n");
    getch();
    return 0;
}

bool sort_out(book *list, u_int numb, char *avtor)
{
    u_int count=0;//ЧИСЛО КНИГ С СООТВЕТСТВУЮЩИМ АВТОРОМ
    register u_int i;//ВСПОМОГАТЕЛЬНАЯ ПЕРЕМЕННАЯ ИСПОЛЬЗУЕМАЯ В ЦИКЛАХ
    //СЧИТАЕМ, СКОЛЬКО У НАС КНИГ С НУЖНЫМ НАМ АВТОРОМ
    for(i=0;i<numb;i++)
        if(!strcmp(list.avtor,avtor))count++;
    if(!count)
    {
        rus_out("Нет ни одной книги данного автора!\n");
        return 0;
    }
    else
    {
        rus_out("Книг найдено: ");
        printf("%d\n",count);
    }
    //СОЗДАЕМ МАССИВ УКАЗАТЕЛЕЙ НА НУЖНЫЕ НАМ КНИГИ
    book **pt_list=(book**)malloc(sizeof(book*) * count);
    u_int sort_pos=0;
    //ИНИЦИАЛИЗИРУЕМ УКАЗАТЕЛИ АДРЕСАМИ НУЖНЫХ КНИГ
    for(i=0;i<numb;i++)
        if(!strcmp(list.avtor,avtor))
        {
            pt_list[sort_pos]=&list;
            sort_pos++;
        };
    //ПРОИЗВОДИМ СОРТИРОВКУ СПИСКА
    book *buf;
    for(i=0; i < count - 1; i++)
    {
        for(u_int j=i+1; j < count; j++)
        {
            if(pt_list[j]->year < pt_list->year)
            {
                buf=pt_list;
                pt_list=pt_list[j];
                pt_list[j]=buf;
            }
        }
    }

    //ВЫВОДИМ ОТСОРТИРОВАННЫЙ СПИСОК
    for(i=0;i<count;i++)
    {
        printf("%u. ",i+1);rus_out("Название: ");
        printf("\"%s\", %d ",pt_list->caption,pt_list->year);
        rus_out("год издания\n");
    }
    free(pt_list);//ОСВОБОЖДАЕМ ПАМЯТЬ ИЗ ПОД СПИСКА
    return 1;
}
//ФУНКЦИЯ ВЫВОДЯЩАЯ РУССКИЕ БУКВЫ В КОНСОЛЬ ДЕЙСТВИТЕЛЬНО РУССКИМИ
void rus_out(char *str)
{
    char out_str[255];
    CharToOem(str,out_str);
    printf("%s",out_str);
    return;
}
14K
17 декабря 2005 года
fir
8 / / 17.12.2005
Пожалуйста помогите!
Задание:
Описати клас ”домашня бібліотека”. Передбачити можливість роботи з довільним числом книг, пошуку книг за якою-небудь ознакою (наприклад, по автору або по року видання), додавання книг в бібліотеку, видалення книг з неї, сортування книг по різних полях. Написати програму, що демонструє роботу з цим класом.

НО писать программу не надо помогите только с двумя функциями это сортировка и удаления книги, а функции показать добавить и поиск я уже сделал.
Тоесть у меня есть текстовый файл:
lkjdf 1239
jkllk 2334
lkjbm 1000
и мне надо его отсортировать(по году) и функцию удаления книги(желательно по автору)
243
18 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
[color=red]Огромная просьба - создай новую тему![/color]
Цитата:
Originally posted by fir
Пожалуйста помогите!
Задание:
Описати клас ”домашня бібліотека”. Передбачити можливість роботи з довільним числом книг, пошуку книг за якою-небудь ознакою (наприклад, по автору або по року видання), додавання книг в бібліотеку, видалення книг з неї, сортування книг по різних полях. Написати програму, що демонструє роботу з цим класом.


Нет, я конечно все понимаю, страна у нас интернациональная, но все же большинство участников форума говорят по русски и поймут данное задание с большим трудом. (я вразумил твое задание, но все же так не надо)

Цитата:
Originally posted by fir
НО писать программу не надо помогите только с двумя функциями это сортировка


Ты СТРАШНЫЙ ЛЕНТЯЙ! Слов нет. См. выше - в моем предыдущем посте как раз есть функция сортировки.

Цитата:
Originally posted by fir
и удаления книги, а функции показать добавить и поиск я уже сделал.
Тоесть у меня есть текстовый файл:
lkjdf 1239
jkllk 2334
lkjbm 1000
и мне надо его отсортировать(по году) и функцию удаления книги(желательно по автору)


Вопрос такой - у тебя все это счастье в массиве хранится, или в списке?

14K
18 декабря 2005 года
fir
8 / / 17.12.2005
да есть функция сортировки но она не берет значений из файла...
масива нету привожу:
main.cpp
Код:
#include "C:\USER\lab6\lab6.cpp"
[COLOR=BLUE]#include <stdlib.h>
 void main ()
{
  library lib;
  char ch;
  l1:  clrscr();
    printf("\n\n\n\n\t\tHOME LIBRARY\n\n");
    printf("\n\n\n\n\t\tVuberete nugnoe deystvie:\n\n");
    printf("\t\t\t1.Add book\n");
    printf("\t\t\t2.Show book\n");
    printf("\t\t\t3.Search book\n");
    printf("\t\t\t4.Delete book\n");
    printf("\t\t\t5.Sort book\n");
    printf("\t\t\t6.Exit");
     ch=getch();
   switch(ch){
     case '1': lib.add();goto l1;
     case '2': lib.show();goto l1;
     case '3': lib.find();goto l1;
     case '4': lib.del();goto l1;
     case '5': lib.sort();goto l1;
     case '6': exit(1);
     default : goto l1;
           }
 }
[/COLOR]
LAB6.CPP
Код:
[COLOR=BLUE]#include <io.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
class library {
public:
 char a[20];
 int y;
void add();
void del();
void find();
void sort();
void show();
              };

void library :: add() {
clrscr();
char ch;
ofstream file("c:\\user\\lab6\\bi.txt",ios::app);
l1: printf("\n\nEnter Author:");
    cin>>a;
    printf("\n\nEnter Year:");
    cin>>y;
    file<<a<<" "<<y<<endl;;
    printf("\n\nBook ADDED");
    printf("\n\nMore?(y/n))");
ch=getch();
  switch(ch) {
    case 'y':goto l1;
    default :break;
             }
file.close();
}

void library :: show() {
 clrscr();
  printf("\n\n\tLIST LIBRARY\n\n");
   ifstream file1("c:\\user\\lab6\\BI.TXT");
 while (!file1.eof()){
     file1>>a>>y;
     cout<<"\t Author:"<<a<<"\t\t Year:"<<y<<endl;}
 getch();
 file1.close();
}
void library :: find() {
char b[20];
clrscr();
  cout<<"\n\n\n\t\t\tWhat Authors to find?"; cin>>b;
   ifstream file("c:\\user\\lab6\\bi.txt");
    while(!file.eof())
    {
     file>>a>>y;
     if(!strcmpi(a,b)){
     cout<<"\n\t"<<a<<"\t"<<y<<endl;}
    }
    getch();
}

void library :: del()
 {
???????????????????
getch();
  }

void library :: sort(){
clrscr();
???????????????????
getch();
}
[/COLOR]

ДА нимагу я его отредактирыва яс отключены все нах поотключено пипец......йолы палы и тырнета капейки......
243
18 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
Так, я щас после ночной смены нифига не соображаю, особенно в таком изложении - даже смотреть что там у тебя лень. Лягу спать, а ты пока КОД ДО УМА ДОВЕДИ!!! Т.е. оформи его так, как указанно в самом первом топике данной ветки форума. Не зря же это написано, да еще и прикреплено! Не сделаешь - попрошу что бы модер принял санкции. Серьезно.
243
19 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by fir
ДА нимагу я его отредактирыва яс отключены все нах поотключено пипец......


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

Цитата:
Originally posted by fir
йолы палы и тырнета капейки......


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

Теперь по теме.
Т.к. тебе надо редактировать библиотеку в онлайне так сказать, то разумнее всего будет создать динамический список - см. мой самый первый пост. Только вместо ввода с клавиатуры поставь оператор чтения из файла в этот список. Удаление элемента - см. тот же самый пост.
Сортировка - пост номер 3. Там производится сортировка динамического списка.
Запись отредактированного списка в файл - см. как удаляется весь список в конце программы, и перед удалением каждого элемента записывай его в файл.
Т.к. ты юзаешь С++, то используй new & delete, а не malloc() & free() как это сделано у меня.
Попытайся хоть что-то сделать сам. Результат - на обозрение. Иначе помогать не стану. Если только кто другой поможет.
ЗЫ после тега [ code ] вовсе не надо ставить color - код сам посинеет.

14K
20 декабря 2005 года
fir
8 / / 17.12.2005
Привожу полную программу только без сортировку работаит с двумя полями: автор,год.
MAIN.CPP
Код:
#include "C:\USER\lab6\lab6.cpp"
#include <stdlib.h>
void main ()
{
library lib;
char ch;
l1:  clrscr();
  printf("\n\n\n\n\t\tHOME LIBRARY\n\n");
  printf("\n\n\n\n\t\tVuberete nugnoe deystvie:\n\n");
  printf("\t\t\t1.Add book\n");
  printf("\t\t\t2.Show book\n");
  printf("\t\t\t3.Search book\n");
  printf("\t\t\t4.Delete book\n");
  printf("\t\t\t5.Sort book\n");
  printf("\t\t\t6.Exit");
  ch=getch();
switch(ch){
     case '1': lib.add();goto l1;
     case '2': lib.show();goto l1;
     case '3': lib.find();goto l1;
     case '4': lib.del();goto l1;
//     case '5': lib.sort();goto l1;
     case '6': exit(1);
     default : goto l1;
      }
}

LAB6.CPP
Код:
#include <io.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
class library {
public:
 char a[20];
 int y;
void add();
void del();
void find();
void sort();
void show();
};

void library :: add() {
clrscr();
char ch;
ofstream file("c:\\user\\lab6\\bi.txt",ios::app);
l1: printf("\n\nEnter Author:");
    cin>>a;
    printf("\n\nEnter Year:");
    cin>>y;
    file<<a<<" "<<y<<endl;;
    printf("\n\nBook ADDED");
    printf("\n\nMore?(y/n))");
ch=getch();
switch(ch) {
case 'y':goto l1;
default :break;
}
file.close();
}

void library :: show() {
clrscr();
printf("\n\n\tLIST LIBRARY\n\n");
ifstream file("c:\\user\\lab6\\bi.TXT",ios::app);
while (!file.eof()){
     file>>a>>y;
     if(file.eof()){break;} else
     cout<<"\t Author:"<<a<<"\t\t Year:"<<y<<endl;}
cout<<"\n\n\t\tPress any key to continue";
getch();
file.close();
}

void library :: find() {
char b[20];
clrscr();
cout<<"\n\n\n\t\t\tWhat Authors to find?\n"; cin>>b;
ifstream file("c:\\user\\lab6\\bi.txt");
    while(!file.eof())
    {
     file>>a>>y;
     if(!strcmpi(a,b)){
     cout<<"\n\t"<<a<<"\t"<<y<<endl;}
    }
        cout<<"\n\n\t\tPress any key to continue";
    getch();
}

void library :: del() {
char b[20];
clrscr();
cout<<"\n\n\n\t\t\tWhat Authors to DELETE?\n"; cin>>b;
ifstream file1("c:\\user\\lab6\\bi.txt");
ofstream file2("c:\\user\\lab6\\bi1.txt",ios::trunc);
    while(!file1.eof())
    {
     file1>>a>>y;
     if(strcmpi(a,b)){
       if(file1.eof()){break;} else
     file2<<a<<" "<<y<<endl;
             }
    }
 cout<<"\n\n\t\tBook is Deleted";
 cout<<"\n\n\t\tPress any key to continue";
 file1.close();
 file2.close();
ifstream file3("c:\\user\\lab6\\bi1.txt");
ofstream file4("c:\\user\\lab6\\bi.txt",ios::trunc);
    while(!file3.eof()){
    file3>>a>>y;
    if(!strcmpi(a,a)){
     if(file3.eof()){break;} else
    file4<<a<<" "<<y<<endl;}}
    file3.close();
    file4.close();
    getch();
}



Работает просто отлично. Но пажалуйста надо уже на завтра сдать полную лабу! помогите с сортировкой прошу очень пажалустаааааа!!!
243
20 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by fir
Но пажалуйста надо уже на завтра сдать полную лабу! помогите с сортировкой прошу очень пажалустаааааа!!!


В С++ не шарю :) И что-то мне кажется ты муйней страдаешь. Файлов развел кучу.
Давай так: сделай чтение файла в масиив структур вида:

 
Код:
struct book
{
    char avtor[255];
    int  year;
};

А я тебе сортировку этого массива напишу. Только это будет наверное уже вечером. (вечер у меня часов до 3-х ночи :))
14K
20 декабря 2005 года
fir
8 / / 17.12.2005
Вот мои попытки:
Код:
void library :: sort() {
struct book
{
    char av[20];
    int  ye;
};
int size=0;
int i,j,x;
FILE *f1 = fopen("c:\\user\\lab6\\bi.TXT","w+t");
while(!feof){
size++;}
while(!feof){
fscanf(f1,"%s %d\n",book.av,book.ye);
 for ( i=0; i < size; i++)
   x = book.ye;
 for ( j=i-1; j>=0 && book[j].ye > x; j--)
 book[j+1].ye = book[j].ye;
 book[j+1] = x;
 }
  for (int h = 0; h <size; h++)
  printf ("%d ", book[h].ye);
}  
 getch();
 fclose(f1);
}

ЗЫ:жду не дождусь вечера.......
243
21 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
Че-то ты там накосячил. Ну да ладно. Вот оформленно отдельной программкой:
Код:
#include <windows.h>
#include <stdio.h>

#define NAME_LEN    255

struct book
{
    char avtor[NAME_LEN];
    int  year;
};


int sort(void)
{
    register u_int book_count,i;//ВСПОМОГАТЕЛЬНАЯ ПЕРЕМЕННАЯ ИСПОЛЬЗУЕМАЯ В ЦИКЛАХ
    char name[NAME_LEN];
    int year;
    FILE *file=fopen("file.txt","r");
    if(!file)return 0;
    for(book_count=0;fscanf(file,"%s%d",name,&year)!=EOF;book_count++);//СЧИТАЕМ КОЛИЧЕСТВО ЗАПИСЕЙ
    rewind(file);//УСТАНАВЛИВАЕМ УКАЗАТЕЛЬ НА НАЧАЛО ФАЙЛА
    book *list=(book*)malloc(sizeof(book)*book_count);
    if(!list)return 0;
    for(i=0;fscanf(file,"%s%d",&list.avtor,&list.year)!=EOF;i++)
    {
       
    }
    book buf;
    for(i=0; i < book_count- 1; i++)
    {
        for(u_int j=i+1; j < book_count; j++)
        {
            if(list[j].year < list.year)
            {
                buf=list;
                list=list[j];
                list[j]=buf;
            }
        }
    }
    freopen("file.txt","w",file);
   
    for(i=0;i<book_count;i++)
        fprintf(file, "%s %d\n",list.avtor,list.year);

    free(list);
    fclose(file);
    return 1;
}

int main(void)
{
    if(!sort())printf("Sort faild!\n");
    else printf("Sort succesed!\n");
    return 0;
}

Надеюсь - сможешь сам вставить эту функцию в свою программу.
14K
21 декабря 2005 года
fir
8 / / 17.12.2005
ОГРОМНОЕ СПАСИБО [SIZE=huge]pacific_7[/SIZE] за оказаную помощь!!!

Ниже вылажую полностью готовую программу:
Описать класс "домашняя библиотека". Показует книги, удаляет книгу по автору, находит книгу по автору, добавить книгу в библиотеку, а также отсортировать по увеличению года.
Примечание: работает с двумя полями "АВТОР" "ГОД".

main.cpp
Код:
{
library lib;
char ch;
l1:  clrscr();
  printf("\n\n\n\n\t\tHOME LIBRARY\n\n");
  printf("\n\n\n\n\t\tVuberete nugnoe deystvie:\n\n");
  printf("\t\t\t1.Add book\n");
  printf("\t\t\t2.Show book\n");
  printf("\t\t\t3.Search book\n");
  printf("\t\t\t4.Delete book\n");
  printf("\t\t\t5.Sort book\n");
  printf("\t\t\t6.Exit");
  ch=getch();
switch(ch){
     case '1': lib.add();goto l1;
     case '2': lib.show();goto l1;
     case '3': lib.find();goto l1;
     case '4': lib.del();goto l1;
     case '5': lib.sort();goto l1;
     case '6': exit(1);
     default : goto l1;
      }
}

lab6.cpp
Код:
#include <io.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
class library {
public:
 char a[20];
 int y;
void add();
void del();
void find();
void sort();
void show();
};

struct book
{
    char avtor[25];
    int  year;
};

void library :: add() {
clrscr();
char ch;
ofstream file("c:\\user\\lab6\\bi.txt",ios::app);
l1: printf("\n\nEnter Author:");
    cin>>a;
    printf("\n\nEnter Year:");
    cin>>y;
    file<<a<<" "<<y<<endl;;
    printf("\n\nBook ADDED");
    printf("\n\nMore?(y/n))");
ch=getch();
switch(ch) {
case 'y':goto l1;
default :break;
}
file.close();
}

void library :: show() {
clrscr();
printf("\n\n\tLIST LIBRARY\n\n");
ifstream file("c:\\user\\lab6\\bi.TXT",ios::app);
while (!file.eof()){
     file>>a>>y;
     if(file.eof()){break;} else
     cout<<"\t Author:"<<a<<"\t\t Year:"<<y<<endl;}
cout<<"\n\n\t\tPress any key to continue";
getch();
file.close();
}

void library :: find() {
char b[20];
clrscr();
cout<<"\n\n\n\t\t\tWhat Authors to find?\n"; cin>>b;
ifstream file("c:\\user\\lab6\\bi.txt");
    while(!file.eof())
    {
     file>>a>>y;
     if(!strcmpi(a,b)){
     cout<<"\n\t"<<a<<"\t"<<y<<endl;}
    }
        cout<<"\n\n\t\tPress any key to continue";
    getch();
}

void library :: del() {
char b[20];
clrscr();
cout<<"\n\n\n\t\t\tWhat Authors to DELETE?\n"; cin>>b;
ifstream file1("c:\\user\\lab6\\bi.txt");
ofstream file2("c:\\user\\lab6\\bi1.txt",ios::trunc);
    while(!file1.eof())
    {
     file1>>a>>y;
     if(strcmpi(a,b)){
       if(file1.eof()){break;} else
     file2<<a<<" "<<y<<endl;
             }
    }
 cout<<"\n\n\t\tBook is Deleted";
 cout<<"\n\n\t\tPress any key to continue";
 file1.close();
 file2.close();
ifstream file3("c:\\user\\lab6\\bi1.txt");
ofstream file4("c:\\user\\lab6\\bi.txt",ios::trunc);
    while(!file3.eof()){
    file3>>a>>y;
    if(!strcmpi(a,a)){
     if(file3.eof()){break;} else
    file4<<a<<" "<<y<<endl;}}
    file3.close();
    file4.close();
    getch();
}

void library :: sort() {
clrscr();
int book_count,i;
char name[25];
int year;
FILE *file=fopen("C:\\user\\lab6\\bi.txt","r");
for(book_count=0;fscanf(file,"%s %d",name,&year)!=EOF;book_count++);
rewind(file);
book *list=(book*)malloc(sizeof(book)*book_count);
for(i=0;fscanf(file,"%s %d",&list.avtor,&list.year)!=EOF;i++)
{}
book buf;
for(i=0; i < book_count- 1; i++)
  {
  for(int j=i+1; j < book_count; j++)
    {
    if(list[j].year < list.year)
      {
        buf=list;
        list=list[j];
        list[j]=buf;
       }
     }
   }
freopen("c:\\user\\lab6\\bi.txt","w",file);
printf("\n\n\n\t\t\t\tBook Sorted!");
printf("\n\n\n\t\t\t\tPress any key to continue!");
for(i=0;i<book_count;i++)
fprintf(file, "%s %d\n",list.avtor,list.year);
free(list);
fclose(file);
getch();
}

Исправленно...лабу сдал....5)
243
22 декабря 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by fir
 
Код:
struct book
{
    char avtor[25];
    int  year;
[color=red]    book *next;[/color]//ЭТО ИЗЛИШНЕ
};


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

38K
27 апреля 2008 года
LenivecSid
3 / / 27.04.2008
Объясните, как это запустить под C++Builder.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог