Другие языки программирования и технологии
C# Написать программу, в которой с помощью делегатов и анонимных методов (лямбда выражений) создаётся экземпляр делегата,
которой вызывается без аргументов, а результатом возвращает текстовое значение дня недели. При каждом новом вызове экземпляра результатом возвращается значение следующего дня недели.
Это абсолютно бредовое задание:
1. Делегат - это указатель на метод и его параметры. ВСЕ. Больше НИЧЕГО.
2. Таким образом, если делегат возвращает просто строку, никоим образом нельзя ограничить такой делегат так, чтобы он возвращал только дни недели - он вернет ЛЮБУЮ строку, которую вернет ассоциированный с ним метод.
3. Создание экземпляра делегата нельзя сделать через лямбда-выражение. Т. е. implicitly он, ясен пень, при некоторых условиях будет создан, но explicitly - нельзя, нужен new.
4. Делегат сам по себе не может хранить и обрабатывать никакую информацию, поэтому понятие "следующий вызов" применительно к голому делегату - это полная бессмыслица: он просто не отличает один вызов от другого.
Таким образом, скорее всего, тебе нужно создать не делегат, а класс, возвращающий по очереди некие названия дней недели, и дергать какой-то его метод через делегат (возможно, сам класс должен такой делегат для начала вернуть). Но согласись, что это совершенно другое задание.
1. Делегат - это указатель на метод и его параметры. ВСЕ. Больше НИЧЕГО.
2. Таким образом, если делегат возвращает просто строку, никоим образом нельзя ограничить такой делегат так, чтобы он возвращал только дни недели - он вернет ЛЮБУЮ строку, которую вернет ассоциированный с ним метод.
3. Создание экземпляра делегата нельзя сделать через лямбда-выражение. Т. е. implicitly он, ясен пень, при некоторых условиях будет создан, но explicitly - нельзя, нужен new.
4. Делегат сам по себе не может хранить и обрабатывать никакую информацию, поэтому понятие "следующий вызов" применительно к голому делегату - это полная бессмыслица: он просто не отличает один вызов от другого.
Таким образом, скорее всего, тебе нужно создать не делегат, а класс, возвращающий по очереди некие названия дней недели, и дергать какой-то его метод через делегат (возможно, сам класс должен такой делегат для начала вернуть). Но согласись, что это совершенно другое задание.
Я его вот таким способом решил:
namespace ConsoleApp
{
delegate string MyDelegate ();
class Program
{
static MyDelegate my;
static void Main()
{
int i = 0;
Program.my = delegate
{
i++;
switch (i)
{
case 1:
return "Понедельник";
case 2:
return "Вторник";
case 3:
return "Среда";
case 4:
return "Четверг";
case 5:
return "Пятница";
case 6:
return "Суббота";
case 7:
return "Воскресенье";
}
return "";
};
for (int q = 0; q < 7; q++)
Console.WriteLine(Program.my());
Console.ReadKey();
}
}
}
С лямбда выражением это могло выглядеть как то так:
namespace ConsoleApp
{
delegate string MyDelegate ();
class Program
{
static MyDelegate my;
static void Main()
{
int i = -1;
Program.my = ()=>
{
string[] str = { "Понедельник", "Вторник", "Среда","Четверг", "Пятница", "Суббота", "Воскресенье" };
i++;
return str[i];
};
for (int q = 0; q < 7; q++)
Console.WriteLine(my());
Console.ReadKey();
}
}
}
namespace ConsoleApp
{
delegate string MyDelegate ();
class Program
{
static MyDelegate my;
static void Main()
{
int i = 0;
Program.my = delegate
{
i++;
switch (i)
{
case 1:
return "Понедельник";
case 2:
return "Вторник";
case 3:
return "Среда";
case 4:
return "Четверг";
case 5:
return "Пятница";
case 6:
return "Суббота";
case 7:
return "Воскресенье";
}
return "";
};
for (int q = 0; q < 7; q++)
Console.WriteLine(Program.my());
Console.ReadKey();
}
}
}
С лямбда выражением это могло выглядеть как то так:
namespace ConsoleApp
{
delegate string MyDelegate ();
class Program
{
static MyDelegate my;
static void Main()
{
int i = -1;
Program.my = ()=>
{
string[] str = { "Понедельник", "Вторник", "Среда","Четверг", "Пятница", "Суббота", "Воскресенье" };
i++;
return str[i];
};
for (int q = 0; q < 7; q++)
Console.WriteLine(my());
Console.ReadKey();
}
}
}
Виталий Гамов
боже... я думал больше часа как решить эту задачу, а оказалось это так легко?
Виталий Гамов
и вы решили неправильно, так как " i " каждый раз будет увеличиваться(то есть после последнего элемента массива будет исключение), а в задание говориться, что после Воскресенья должен идти Понедельник.
Похожие вопросы
- Программа C++ Напишите программу которая переводит из десятичной в двоичную систему счисления (C++)
- C++, написать программу, цикл for Программа, которая определяет является ли введенное число простым.
- Visual C++ написать программу. Ребят help.
- На каком языке написаны программы, ну те, с помощью которых на компе мы слушаем музыку, или смотрим фильмы?
- Программирование c++ написать программу
- Помогите написать программу на Си с помощью ФУНКЦИЙ.
- Можно ли на C++ написать сложные программы? Как?
- Как можно написать программу на языке C, которая будет выводить числа от 1 до 1000 без if, switch, do, while, for, goto?
- Помогите написать программу на C/C++
- Написал программу в c++. Отправил на другой компьютер. Выдало ошибку потому