Предмет: Информатика, автор: yavsepoymu

C#
Дана последовательность натуральных чисел (одно число в строке), завершающаяся числом 0.

Выведите все нечетные числа из этой последовательности, сохраняя их порядок


В этой задаче нельзя использовать глобальные переменные и передавать какие-либо параметры в рекурсивную функцию

Функция получает данные, считывая их с клавиатуры

Функция не возвращает значение, а сразу же выводит результат на экран Основная программа должна состоять только из вызова этой функции


Приложения:

Ответы

Автор ответа: KnowsUser1
1

Ответ:

using System;

using System.Collections;

using System.Collections.Generic;

namespace CSLear

{

   class Program

   {

       static void Main(string[] args)

       {

           var InputStream = ReadSeqWhile(x => x != 0);

           foreach (int item in InputStream)

           {

               if (item % 2 != 0) { Console.WriteLine(item); }

           }

       }

       

       public static IEnumerable<int> ReadSeqWhile(Func <int, bool> Predicate)

       {

           var rtemp = int.Parse(Console.ReadLine());

           while (Predicate(rtemp))

           {

               yield return rtemp;

               rtemp = int.Parse(Console.ReadLine());

           }

       }

   }

}

Объяснение:


KnowsUser1: Упс, заметил только сейчас - программа выводит в консоль удовлетворяющий элемент последовательности сразу, как только считывает его, не дожидаясь до конца ввода. Что бы исправить, добавьте в проект пространство имён System.Linq
KnowsUser1: и измените цикл foreach на 12 строке следующим образом:
foreach (var item in InputStream.Where(x => x % 2 != 0).ToList(){ Console.WriteLine(item)}
KnowsUser1: _.ToList() *
yavsepoymu: Все сделала, как вы сказали
yavsepoymu: using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace kp9p_pr_4_zad_10
{
class Program
{
static void Main(string[] args)
{
var InputStream = ReadSeqWhile(x => x != 0);
foreach (var item in InputStream.Where(x => x % 2 != 0).ToList()
{
Console.WriteLine(item);
}
}


public static IEnumerable ReadSeqWhile(Func Predicate)

{
var rtemp = int.Parse(Console.ReadLine());

while (Predicate(rtemp))

{
yield return rtemp;

rtemp = int.Parse(Console.ReadLine());
}
}
}
}
yavsepoymu: Не хватает фигурной скобки после .ToList()
Перепробовала разные комбинации
yavsepoymu: Только больше ошибок появляется
KnowsUser1: На удивление, у меня всё прекрасно работает. Если вы работаете с C#, вероятнее всего вы работаете или в VS, или в VSCode. И та, и другая IDE весьма чётко и понятно описывают ошибки. Логика кода выстроена правильно, я никогда не добавляю решения вообще не протестировав их
KnowsUser1: То, что в этот раз я написал в комментариях, что решение содержит ошибку и как её исправить, произошло лишь потому, что в условие слегка разниться с примером ввода/вывода "Функция не возвращает значение, а сразу выводит на экран".
KnowsUser1: Задание отмечено как студенческого уровня. И отсюда возникает вопрос - если вы не в состоянии исправить мелкие синтаксические ошибки, из разряда забытой скобки, на которые ещё и чётко указывают среды разработки, может вы где то не там учитесь?
Похожие вопросы
Предмет: Українська мова, автор: moviackdim
Предмет: МХК, автор: Кися12345678901