Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите пожалуйста исправить программу, на с++ 
V
    Опции темы
KyKy
Дата 2.4.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КуКу



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 2.1.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Написал прогу, но почему-то не работает добавление элемента в конец.(Линейные Списки)
Помогите пожалуйста исправить её.

Код

/*    callmenu.cpp
    Файл из проекта:        LinearList
    Главный файл проекта:    main.cpp    */

#include "main.h"

void callmenu(ELEMENT *start)
{
    int in=NULL;
    for( ; ; )
    {        
        //Очистка буфера
        _flushall();
        
        //вывод пунктов меню на консоль
        printf("\nLinear list - Unidirectional\nData type - integer\n\n1.Add to End\n2.Delete from Beginning\n3.Delete All\n4.Print All\n5.Insert between Two Others\n6.Exit\n\nSelect your option: ");

        in=_getche();
        //Очистка экрана
        system("cls");

        switch(in)
        {
        case 49:printf("\nAdding...\n"); Print(start); Add_End(start); Print(start);            //при нажатии 1 вызывает функцию добавления в начало списка
                break;
        case 50:printf("\nDeleting...\n");    Print(start); Del_Beg(start); Print(start);            //при нажатии 2 вызывает функцию удаления из начала списка
                break;
        case 51:printf("\nDeleting all...\n");    Print(start); Del_All(start); Print(start);        //при нажатии 3 удаляет все элементы списка
                break;
        case 52:printf("\nPrinting...\n"); Print(start);                                        //при нажатии 4 выводит содержимое списка на экран
                break;
        case 53:printf("\nInserting...\n"); Print(start); Insert(start); Print(start);            //при нажатии 5 вызывает функцию вставки элемента между 2 другими на заданную позицию
                break;
        case 54:printf("\nBail\n"); exit(1);                                                    //при нажатии 6 выходит из программы
        }

        //функция вывода ошибки при нажатии на любую жругую клавишу
        if(in>54 || in<49)
        {
            printf("Bail anyway\n");
        }

    }
}


Код

/*    del_beg.cpp
    Файл из проекта:        Linear List
    Главный файл проекта:    main.cpp    */    

#include "main.h"

//Функция удаления первого элемента списка
void Del_Beg(ELEMENT* &start)
{
    ELEMENT *del;                                        //создание указателя на удаляемый элемент
            
    //проверка на то, есть ли что-то для удаления
    if(start==NULL)
    {
        printf("\nNothing to delete\n");
        return;
    }
    
    //если элемент в списке 1, его удаление и указание "start" в пустоту для описания пустого списка
    if(start->next==NULL)
    {
        delete start;
        start=NULL;
        return;
    }

    //если элементов в списке несколько, перенос указателя на начало к следующему элементу и удаление 1-го
    if(start->next!=NULL)
    {
        del=start;
        start=del->next;
        delete del;
        return;
    }

    
}

//Функция удаления всего списка через зацикливание удаления 1-го элемента
void Del_All(ELEMENT* &start)
{
    while(start!=NULL)
    {
        Del_Beg(start);
    }
    return;
}


Код

/*    main.cpp
    Проект:                    Linear List
    Разработчик:            
    Группа:                    
    Файлы ресурсов:            callmenu.cpp
    Заголовочные файлы:        main.h    */

#include "main.h"

//главная функция проекта
void main()
{
    ELEMENT *start=NULL;        //отсутствие первого элемента
    callmenu(start);            //вызов функции меню
}


Код

/*    print.cpp
    Файл из проекта:        Linear List
    Главный файл проекта:    main.cpp    */

#include "main.h"

//Функция печати содержимого списка
void Print(ELEMENT* start)
{
    ELEMENT *print;            //создание указателя на печатаемый элемент
    
    //вывод сообщения о пустом списке, если start указывает в пустоту
    if(start==NULL)
    {
        printf("\nList is empty\n");
        return;
    }

    
    print=start;            //указатель печати прикреплен к началу списка
    printf("\n");

    //последовательная печать полей "data" всех элементов списка
    while(print!=NULL)
    {
        printf("%d ", print->data);

        print=print->next;
    }
    printf("\n\n");            //вывод 1 пустой строки после печати содержимого списка
}


Код

/*    add_end.cpp
    Файл из проекта:        Linear List
    Главный файл проекта:    main.cpp    */

#include "main.h"

//Функция добавления нового элемента в начало списка
void Add_End(ELEMENT* &start)
{
    ELEMENT *temp,
        *cur;                                    //указатель на временный элемент

    temp = new ELEMENT;                                //создание временного элемента и задание указателя

    //проверка на правильность создания элемента
    if(temp==NULL)
    {
        printf("Element construction error\n");
        return;
    }
    
    //ввод информации в поле "data" элемента
    int data;
    printf("Input your data: ");
    //ввод данных с проверкой, при неправильном вводе - удаление элемента для избежания memory leak
    if(scanf("%d", &data)!=1)
    {
        printf("Error reading data\n");
        delete temp;
        return;
    }
    
    temp->data=data;//запись данных в элемент
    temp->next=NULL;

    //описание элемента как 1-го в списке, если до этого он был пуст
    if(start==NULL)
    {    
        
        start=temp;
        start->next=NULL;
        return;
    }

    else{
    cur=start;
    while( cur->next != NULL)
        cur=cur->next;
    cur->next=temp;
        return;}



Код

/*    main.h
    Заголовочный файл проекта:        Linear List
    Главная функция находится в:    main.cpp    */

#ifndef MAIN_H
#define MAIN_H

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

    //Описание полей, которые будет содержать элемент
    struct ELEMENT
    {
        int data;
        ELEMENT* next;
    };

    //Прототипы функций
    void callmenu(ELEMENT* start);
    void Add_End(ELEMENT* &start);
    void Del_Beg(ELEMENT* &start);
    void Del_All(ELEMENT* &start);
    void Print(ELEMENT* start);
    void Insert(ELEMENT* &start);

#endif

Добавлено @ 15:39
хех левая буква зю была) теперь всё супер.
Добавлено @ 15:46
1.Принимаю любую критику.
2.Вопрос что нужно исправть чтобы получился кольцевой список?

Это сообщение отредактировал(а) KyKy - 2.4.2006, 15:43
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.