• Задачники или упражнения для самопроверки

    С#. NET
    Г. Шилдт «С# Учебный курс»
    Э. Троелсен «С# и платформа .NET»
    Г. Шилдт «Полный справочник по C#»

    Карли Ватсон «Программист — программисту С#»

  • Stack

    Это же многострочный комент, а я использовала однострочный.Разве нужно комментировать строку с обеих сторон, если можно поставить слэши с одной?

  • Stack

    Да ладно, нормальный коментарий...Чем он плох?

  • Stack

    Существует ли предел универсальности программного кода? Ведь даже не используемые в некотором случае его элементы, могут пригодится для решения иной задачи.Или же в таком случае необходимо делить код на отдельные функциональные части, может даже на независимые программы? Валить все в одну кучу не очень хорошо, да и делить не резонно...Что делать?

  • Stack

    Разве использование литералов является хорошим стилем программирования?

  • Stack

    я вполне согласна, что программу гораздо легче воспринимать на одном языке.А на каком языке надо оформлять XML?

  • Stack

    Почему такое враждебное отношение к кириллице?

  • Stack

    Программа заработала!!! а ошибка, соглашусь, была тупая...

  • Stack

    Может, у меня не идеальный код, но это только начало, а за совет спасибо...

  • Stack

    Можно ли расширить Stack для конкретной программы, не меняя исходного программного кода, или же потребность в расширении Stack вызвана некорректностью данного кода?

  • Stack

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Collections;
    namespace klass
    {
    public class Book
    {
    private string НазваниеКниги_;
    private int ГодИздания_;
    private string ФамАвт_;
    /// < summary>
    /// Обеспечивает доступ к полю, которое хранит название книги
    /// </summary>
    public string НазваниеКниги
    {
    set {НазваниеКниги_ = value;}
    get {return НазваниеКниги_;}
    }
    /// < summary>
    /// Обеспечивает доступ к полю, которое хранит год издания книги, накладывает ограничения на значение данного поля
    /// </summary>
    public int ГодИздания
    {
    set
    {
    if (value > 2010)
    ГодИздания_ = 2010;
    else
    ГодИздания_ = value;
    }
    get {return ГодИздания;}
    }
    /// < summary>
    /// Обеспечивает доступ к полю, которое хранит фамилию автора книги
    /// </summary>
    public string ФамАвт
    {
    set {ФамАвт_ = value;}
    get {return ФамАвт_;}
    }
    /// < summary>
    /// Разбивает строку на элементы
    /// </summary>
    /// < param name= «str» > Передаваемая строка</param>
    public void ИзСтроки (string str)
    {
    String [] str_el = str.Split (’ ’);
    ФамАвт = str_el [0];
    НазваниеКниги = str_el [1];
    ГодИздания = int.Parse (str_el [2]);
    }
    /// < summary>
    /// Превращает информацию о книге в строку
    /// </summary>
    /// < returns> Результат преобразования</returns>
    public string ВСтроку ()
    {
    return «Книга» + " " + ФамАвт + «. » + «Название» + " " + НазваниеКниги + «. » + «Год» + " " + ГодИздания.ToString () + «.»;
    }
    /// < summary>
    /// Вывод строки в файл (на консоль)
    /// </summary>
    /// < param name= «tw» > Переменная-имя файла (консоли) </param>
    public void ВывестиНа (TextWriter tw)
    {
    tw.WriteLine (ВСтроку ());
    }
    /// < summary>
    /// Ввод строки с файла (консоли)
    /// </summary>
    /// < param name= «tr» > Переменная-имя файла (консоли) </param>
    public void ВвестиИз (TextReader tr)
    {
    ИзСтроки (tr.ReadLine ());
    }
    }
    // Сведения о книге состоят из фамилии автора, названия и го¬да издания. Дан набор из 20 таких сведений.
    //Найти название книг данного автора, изданных с 1970 по 1990гг.
    //Упорядочить сведения о книгах по первой букве фамилии автора.
    //Замелить старый год издания на 1992 г., предполагая, что одна из книг переиздана.
    class Books: IComparer< Book>
    {
    private Book [] data;
    public Books ()
    {
    data = new Book [0];
    }
    /// < summary>
    /// Добавление информации о книге в массив данных
    /// </summary>
    public void ДобавитьКнигу ()
    {
    Book [] t_data = new Book [data.Length + 1];
    for (int i = 0; i < data.Length; i++)
    t_data [i] = data [i];
    t_data [data.Length] = new Book ();
    data = t_data;
    }
    /// < summary>
    /// Ввод обновленного массива данных из файла (консоли)
    /// </summary>
    /// < param name= «tr» > Переменная-имя файла (консоли) </param>
    public void ВводИз (TextReader tr)
    {
    String line = tr.ReadLine ();
    while (line! = «~» )
    {
    ДобавитьКнигу ();
    data [data.Length — 1].ИзСтроки (line);
    line = tr.ReadLine ();
    }
    }
    // [SerializableAttribute]
    // [ComVisibleAttribute (true)]
    //public sealed class StackOverflowException: SystemException
    /// < summary>
    /// Вывод данных в файл (на консоль)
    /// </summary>
    /// < param name= «tw» > Переменная-имя файла (консоли) </param>
    public void ВыводНа (TextWriter tw)
    {
    for (int i = 0; i < data.Length; i++)
    data [i].ВывестиНа (tw);
    }
    /// < summary>
    /// Поиск книги по фамилии автора
    /// </summary>
    /// < param name= «author» > Передаваемый параметр-фамилия автора</param>
    /// < returns> Возвращается массив результата поиска</returns>
    public Books НайтиКнигуПоФамилии (string author)
    {
    // определить кол книг из заданного диапазона
    int number = 0;
    for (int i = 0; i < data.Length; i++)
    if (data [i].ФамАвт == author)
    number++;
    // cоздаем массив рез
    Books rez = new Books ();
    rez.data = new Book [number];
    // запол массив рез
    number = 0;//rez.date
    for (int i = 0; i < data.Length; i++) //i-date
    if (data [i].ФамАвт == author)
    rez.data [number++] = data [i];
    return rez;
    }
    /// < summary>
    ///Поиск книг с годом большим либо равным заданному
    /// </summary>
    /// < param name= «year» > Передаваемый параметр-год издания</param>
    /// < returns> Возвращается массив результата поиска</returns>
    public Books НайтиКнигиСГодомБольшимЛибоРавным (int year)
    {
    // определить кол книг из заданного диапазона
    int number = 0;
    for (int i = 0; i < data.Length; i++)
    if (year < = data [i].ГодИздания)
    number++;
    // cоздаем массив рез
    Books rez = new Books ();
    rez.data = new Book [number];
    // запол массив рез
    number = 0;//rez.date
    for (int i = 0; i < data.Length; i++) //i-date
    if (year < = data [i].ГодИздания)
    rez.data [number++] = data [i];
    return rez;
    }
    /// < summary>
    /// Поиск книг с годом меньшим либо равным заданному
    /// </summary>
    /// < param name= «year» > Передаваемый параметр-год издания</param>
    /// < returns> Возвращается массив результата поиска</returns>
    public Books НайтиКнигиСГодомМеньшимЛибоРавным (int year)
    {
    // определить кол книг из заданного диапазона
    int number = 0;
    for (int i = 0; i < data.Length; i++)
    if (data [i].ГодИздания < = year)
    number++;
    // cоздаем массив рез
    Books rez = new Books ();
    rez.data = new Book [number];
    // запол массив рез
    number = 0;//rez.date
    for (int i = 0; i < data.Length; i++) //i-date
    if (data [i].ГодИздания < = year)
    rez.data [number++] = data [i];
    return rez;
    }
    /// < summary>
    /// Обновление данных о книге
    /// </summary>
    /// < param name= «avtor» > Передаваемый параметр-фамилия автора</param>
    /// < param name= «name» > Передаваемый параметр-название книги</param>
    /// < param name= «year» > Передаваемый параметр-год издания</param>
    /// < param name= «new_avtor» > Передаваемый параметр-новая фамилия автора</param>
    /// < param name= «new_name» > Передаваемый параметр-новое название книги</param>
    /// < param name= «new_year» > Передаваемый параметр-новый год издания</param>
    public void ОбновитьКнигу (string avtor, string name, int year, string new_avtor, string new_name, int new_year)
    {
    for (int i = 0; i < data.Length; i++)
    if ((year == data [i].ГодИздания) && (data [i].ФамАвт == avtor) && (data [i].НазваниеКниги == name))
    {
    data [i].ФамАвт = new_avtor;
    data [i].НазваниеКниги = new_name;
    data [i].ГодИздания = new_year;
    }
    }
    /// < summary>
    ///Сортировка массива данных о книгах по фамилии автора
    /// </summary>
    public void СортировкаПоАвтору ()
    {
    Book b;
    for (int i = 0; i < data.Length — 1; i++)
    for (int j = i; j < data.Length; j++)
    if (String.Compare (data [i].ФамАвт, data [j].ФамАвт) > 0)
    {
    b = data [i];
    data [i] = data [j];
    data [j] = b;
    }
    }
    /// < summary>
    /// Сортировка массива данных о книгах по названию книги
    /// </summary>
    public void СортировкаПоНазванию ()
    {
    Book b;
    for (int i = 0; i < data.Length — 1; i++)
    for (int j = i; j < data.Length; j++)
    if (String.Compare (data [i].НазваниеКниги, data [j].НазваниеКниги) > 0)
    {
    b = data [i];
    data [i] = data [j];
    data [j] = b;
    }
    }
    public void СортировкаПоГодам ()
    {
    Array.Sort< Book> (data, this);
    }
    /// < summary>
    /// Определяет количество элементов массива данных
    /// </summary>
    /// < returns> Возвращаемый результат-количество элементов массива</returns>
    public int КоличествоКниг ()
    {
    return data.Length;
    }
    #region Члены IComparer< Book>
    public int Compare (Book x, Book y)
    {
    return x.ГодИздания — y.ГодИздания;
    }
    #endregion
    }
    class Program
    {
    static void Main (string [] args)
    {
    Books books = new Books ();
    int v = 0;
    do
    {
    Console.Clear ();
    Console.Write (
    @«Введите задание
    0-ВЫХОД;
    1-ввод данных;
    2-вывод данных;
    3-сортировка по автору;
    4-сортировка по названию;
    5-обновить книгу;
    6-найти книги по автору и годам;
    7-Сортировка неизвестно по каким признакам; : «);
    try {
    v = int.Parse (Console.ReadLine ());
    if (v == 1)
    {
    Console.Write („Введите имя файла с данными (ввод пустой строки — чтение с консоли): “);
    string str = Console.ReadLine ();
    if (str == »«)
    {
    Console.WriteLine («Введите информацию о книгах (фамилия автора, название книги, год издания). Информацию о каждой книге вводите в одной строке. Для прекращения ввода введите символ ~.»);
    books.ВводИз (Console.In);
    }
    else
    {
    StreamReader sr = new StreamReader (str);
    books.ВводИз (sr);
    sr.Close ();
    }
    Console.WriteLine («Ввод данных завершён...»);
    }
    if (v == 2)
    {
    Console.Write («Введите имя результирующего файла (ввод пустой строки — чтение с консоли): »);
    string str = Console.ReadLine ();
    if (str == «„)
    {
    if (books.КоличествоКниг ()! = 0)
    books.ВыводНа (Console.Out);
    else
    Console.WriteLine („Данных нет! “);
    }
    else
    {
    StreamWriter sw = new StreamWriter (str);
    books.ВыводНа (sw);
    sw.Close ();
    }
    Console.WriteLine („Вывод данных завершён...“);
    }
    if (v == 3)
    {
    books.СортировкаПоАвтору ();
    Console.WriteLine („Сортировка по автору завершена...“);
    }
    if (v == 4)
    {
    books.СортировкаПоНазванию ();
    Console.WriteLine („Сортировка по названию завершена...“);
    }
    if (v == 5)
    {
    Console.Write („Введите имя автора: “);
    string name1 = Console.ReadLine ();
    Console.Write („Введите название книги: “);
    string name2 = Console.ReadLine ();
    Console.Write („Введите год издания книги: “);
    int year1 = int.Parse (Console.ReadLine ());
    Console.WriteLine („Если Вы не хотите изменять некоторые запрашиваемые параметры, передайте пустую строку.“);
    Console.Write („Введите новое имя автора: “);
    string name12 = Console.ReadLine ();
    if (name12 == “»)
    name12 = name1;
    Console.Write («Введите новое название книги: »);
    string name21 = Console.ReadLine ();
    if (name21 == «„)
    name21 = name2;
    Console.Write („Введите новый год издания книги: “);
    int year2 = int.Parse (Console.ReadLine ());
    if (year2.ToString () == “»)
    year2 = year1;
    //Console.WriteLine («Массив обновленных данных: »);
    Console.WriteLine («");
    books.ОбновитьКнигу (name1, name2, year1, name12, name21, year2);
    Console.WriteLine («Данные обновлены...»);
    }
    if (v == 6)
    {
    Console.Write («Введите имя автора: »);
    books = books.НайтиКнигуПоФамилии (Console.ReadLine ());
    Console.Write («Введите начальный год поиска: »);
    books = books.НайтиКнигиСГодомБольшимЛибоРавным (int.Parse (Console.ReadLine (:);
    Console.Write («Введите Конечный год поиска: »);
    books = books.НайтиКнигиСГодомМеньшимЛибоРавным (int.Parse (Console.ReadLine (:);
    }
    if (v == 7)
    {
    //Array.Sort< Живое> (data, data [0]);
    //Console.WriteLine ();
    //Array.Sort< Book> (books.data [], books);
    books.СортировкаПоГодам ();
    books.ВыводНа (Console.Out);
    }
    } catch {
    Console.Write ( «error» );
    } Console.WriteLine ();
    Console.Write («Для продолжения нажмите Enter...»);
    Console.ReadLine ();
    } while (v! = 0);
    }

    } }

  • Stack

    Что означает сообщение: Process is terminated due to StackOverflowEcseption? Как поступать в таком случае и чем вызвана ошибка?

  • Stack