Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2014, 18:07   #1
b0006
 
Регистрация: 17.12.2013
Сообщений: 8
Вопрос Двусвязный список

Вот задание:
1. Считать из текстового файла исходные данные и на их основе создать необходимые объекты.
2. Разместить объекты в контейнере.

Языки программирования
Общее свойство: год разработки – короткое целое
1. Процедурные (наличие, отсутствие абстрактных типов данных – булевская величина)
2. Объектно-ориентированные (наследование: одинарное, множественное, интерфейса – перечислимый тип)
3. Функциональные языки (типизация – перечислимый тип = строгая, динамическая; поддержка «ленивых» вычислений – булевский тип)

Я имею представление,что такое двусвязный список, но написать его не знаю как.

P.S: Текстовый файл во вложении.

Вот всё,что я смог сам:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace text
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadKey();           
        }
    }
 
    class Proc : Base // класс процедурных языков
    {
        bool Atd; // наличие АТД
 
        public Proc(short age, bool Atd)
        {
            this.age = age;
            this.Atd = Atd;
        }
 
        public override string F()
        {
            return "Процедурный язык. Год: " + age + " АТД: " + Atd;
        }
    }
 
    enum legacy { одинарное, множественное, интерфейс }
    class Obj : Base // класс объектно=ориентированных языков
    {
        legacy d; //наследование
 
        public Obj(short age, legacy d)
        {
            this.age = age;
            this.d = d;
        }
 
        public override string F()
        {
            return "Объектный. Год: " + age + "Наследование: " + d; 
        }
    }
 
    enum tip { строгая, динамическая }
    class Func : Base // класс функциональных языков
    {
        tip t; // типизация
        bool lazy; //поддержка "ленивых" вычислений
 
        public Func(short age, tip t, bool lazy)
        {
            this.age = age;
            this.t = t;
            this.lazy = lazy;
        }
 
        public override string F()
        {
            return "Функциональные. Год: " + age + "Типизация: " + t + "Леннивость: " + lazy;
        }
    }
 
    abstract public class Base // главный класс (объединяет все)
    {
        public abstract string F(); // абстрактная функция
 
        public short age { get; set; } // общее свойство(год разработки)
    } 
}
Вложения
Тип файла: txt text.txt (193 байт, 141 просмотров)
b0006 вне форума Ответить с цитированием
Старый 14.11.2014, 18:09   #2
b0006
 
Регистрация: 17.12.2013
Сообщений: 8
По умолчанию

Вот создал еще класс, тут объекты вложены в контейнеры, НО это не двусвязный список,а мне нужен именно двусвязный список
Spisok.cs
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace text
{
    class Spisok
    {
        class Node
        {
            public Base data;
            public Node next;
        };
 
        Node first;
        Node last;
        int R = 0;
 
        public void Print()
        {
            Console.Write("Содержимое: \n");
 
            for (Node cur = first; cur != null; cur = cur.next)
            {
                Console.WriteLine(cur.data.F());
            }
            Console.WriteLine();
        }
 
        public void Addi(Base value)
        {
            Node tmp = new Node();
            tmp.data = value;
            tmp.next = null;
            if (first == null)
            {
                first = tmp;
                last = tmp;
            }
            else
            {
                last.next = tmp;
                last = tmp;
            }
            R++;
        }
 
        public void Remove()
        {
            if (first != null)
            {
                first = first.next;
                if (first == null)
                {
                    last = null;
                }
            }
            R--;
        }
 
        public Base this[int i]
        {
            get
            {
                for (Node cur = first; cur != null; cur = cur.next, i--)
                {
                    if (i == 0)
                    {
                        return cur.data;
                    }
                }
                return null;
            }
            set
            {
                for (Node cur = first; cur != null; cur = cur.next, i--)
                {
                    if (i == 0)
                    {
                        cur.data = value;
                    }
                }
            }
        }
 
        public static void ReadFile(Spisok sp)
        {
            List<Base> s = new List<Base>();
 
            try
            {
                StreamReader file = new StreamReader(@"..\..\TextFile1.txt", Encoding.Default);
                while (!file.EndOfStream)
                {
                    string[] data = file.ReadLine().Split(' ');
                    if (data[0] == "Proc")
                    {
                        sp.Addi(new Proc(Convert.ToInt16(data[1]), Convert.ToBoolean(data[2])));
                    }
                    else if (data[0] == "Obj")
                    {
                        if (data[2] == "одинарное")
                        {
                            sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.одинарное));
                        }
                        if (data[2] == "множественное")
                        {
                            sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.множественное));
                        }
                        if (data[2] == "интерфейс")
                        {
                            sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.интерфейс));
                        }
                    }
                    else if (data[0] == "Func")
                    {
                        if (data[2] == "строгая")
                        {
                            sp.Addi(new Func(Convert.ToInt16(data[1]), tip.строгая, Convert.ToBoolean(data[3])));
                        }
                        if (data[2] == "динамическая")
                        {
                            sp.Addi(new Func(Convert.ToInt16(data[1]), tip.динамическая, Convert.ToBoolean(data[3])));
                        }
                    }
                }
            }
            catch(Exception e)
            {
                Console.WriteLine("Ошибка: " + e.Message);
            }
        }
    }
}
b0006 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двусвязный список (C++) Ferodot Помощь студентам 0 22.04.2014 22:14
Двусвязный Список. loki_man Паскаль, Turbo Pascal, PascalABC.NET 2 23.02.2012 22:59
Двусвязный список Даsha Помощь студентам 3 26.06.2011 11:45
двусвязный список Work Group Помощь студентам 0 24.05.2010 21:27
двусвязный список klykovka Помощь студентам 8 22.05.2010 18:58