W5. Разные задачи на циклы с условием

Напишите в комментариях к этой записи консольные приложения для решения этих задач, укажите также код задачи. Пример решения.
Решены задачи: 2-4,7. Не решены: 1,5,6,8-28.

Задачи

W5.1. Имеется фрагмент программы в виде оператора цикла с параметром, обеспечивающий вывод на экран «столбиком» всех целых чисел от 10 до 30. Оформить этот фрагмент в виде:
а) оператора цикла с предусловием;
б) оператора цикла с постусловием.

W5.2. Имеется фрагмент программы в виде оператора цикла с параметром, обеспечивающий вывод на экран «столбиком» всех целых чисел от 100 до 80. Оформить этот фрагмент в виде:
а) оператора цикла с предусловием;
б) оператора цикла с постусловием.

W5.3. Имеется фрагмент программы в виде оператора цикла с параметром, обеспечивающий вывод на экран «столбиком» квадратного корня из всех целых чисел от a до b (a > b). Оформить этот фрагмент в виде:
а) оператора цикла с предусловием;
б) оператора цикла с постусловием.

W5.4. Дано натуральное число. Определить:
а) количество цифр в нем;
б) сумму его цифр;
в) произведение его цифр;
г) среднее арифметическое его цифр;
д) сумму квадратов его цифр;
е) сумму кубов его цифр;
ж) его первую цифру;
з) сумму его первой и последней цифр.

W5.5. Известны оценки по информатике каждого из 20 учеников класса. В начале списка перечислены все пятерки, затем все остальные оценки. Сколько учеников имеют по информатике оценку «5»? Условный оператор не использовать. Рассмотреть два случая:
1) известно, что пятерки имеют не все ученики класса;
2) допускается, что пятерки могут иметь все ученики класса.

W5.6. Известны сведения о количестве осадков, выпавших за каждый день мая. Первого мая осадков не было. Определить, в течение какого количества первых дней месяца непрерывно, начиная с первого мая, осадков не было? Условный оператор не использовать. Рассмотреть два случая:
1) известно, что в какие-то дни мая осадки выпадали;
2) допускается, что осадков могло не быть ни в какой день мая.

W5.7. Напечатать минимальное число, большее 200, которое нацело делится на 17.

W5.8. Найти максимальное из натуральных чисел, не превышающих 5000, которое нацело делится на 39.

W5.9. Известны данные о росте 15 юношей класса, упорядоченные по убыванию. Нет ни одной пары учеников, имеющих одинаковый рост. В начале учебного года в класс поступил новый ученик. Какое место в перечне ростов займет рост этого ученика? Известно, что его рост не совпадает с ростом ни одного из учеников класса, превышает рост самого низкого ученика и меньше роста самого высокого. Условный оператор не использовать.

W5.10. Известно количество очков, набранных каждой из 20-ти команд-участниц первенства по футболу. Перечень очков дан в порядке убывания (ни одна пара команд не набрала одинаковое количество очков). Определить, какое место заняла команда, набравшая N очков (естественно, что значение N имеется в перечне). Условный оператор не использовать.

W5.11. Гражданин 1 марта открыл счет в банке, вложив 1000 руб. Через каждый месяц размер вклада увеличивается на 2% от имеющейся суммы. Определить:
а) за какой месяц величина ежемесячного увеличения вклада превысит 30 руб.;
б) через сколько месяцев размер вклада превысит 1200 руб.

W5.12.. Начав тренировки, лыжник в первый день пробежал 10 км. Каждый следующий день он увеличивал пробег на 10% от пробега предыдущего дня. Определить:
а) в какой день он пробежит больше 20 км;
б) в какой день суммарный пробег за все дни превысит 100 км.

W5.13. В некотором году (назовем его условно первым) на участке в 100 гектаров средняя урожайность ячменя составила 20 центнеров с гектара. После этого каждый год площадь участка увеличивалась на 5%, а средняя урожайность на 2%. Определить:
а) в каком году урожайность превысит 22 центнера с гектара;
б) в каком году площадь участка станет больше 120 гектаров;
в) в каком году общий урожай, собранный за все время, начиная с первого года, превысит 800 центнеров.

W5.14. Найти наибольший общий делитель двух заданных натуральных чисел, используя алгоритм Евклида.

W5.15. Найти наименьшее общее кратное двух заданных натуральных чисел.

W5.16. Даны натуральные числа a и b, обозначающие соответственно числитель и знаменатель дроби. Сократить дробь, т. е. найти такие натуральные числа p и q, не имеющие общих делителей, что p/q = a/b.

W5.17. Дан прямоугольник с размерами 425 х 131 . От него отрезают квадраты со стороной 131, пока это возможно. Затем от оставшегося прямоугольника вновь отрезают квадраты со стороной, равной 425 — 131·3 = 32, и т. д. На какие квадраты и в каком их количестве будет разрезан исходный прямоугольник?

W5.18. Дан прямоугольник с размерами a x b. От него отрезают квадраты максимального размера, пока это возможно. Затем от оставшегося прямоугольника вновь отрезают квадраты максимально возможного размера и т. д. На какие квадраты и в каком их количестве будет разрезан исходный прямоугольник?

W5.19. Даны целые числа a и b (a > b). Определить:
а) результат целочисленного деления a на b, не используя стандартную операцию целочисленного деления;
б) остаток от деления a на b, не используя стандартную операцию вычисления остатка.

W5.20. Даны натуральные числа m и n. Получить все кратные им числа, не превышающие m·n. Условный оператор не использовать. Задачу решить двумя способами.

W5.21. В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. Дано натуральное число n. Как наименьшим количеством таких денежных купюр можно выплатить сумму n (указать количество каждой из используемых для выплаты купюр)? Предполагается, что имеется достаточно большое количество купюр всех достоинств.

W5.22. Дано натуральное число (пусть запись этого числа в десятичной системе имеет вид akak-1…a0 ). Найти:
а) знакочередующуюся сумму цифр этого числа a0 — a1 +… + (-1)kak;
б) знакочередующуюся сумму цифр этого числа ak — ak—1 +… + (-1)ka0;
Примечание. В обеих задачах условный оператор и операцию возведения в степень не использовать.

W5.23. Дано натуральное число. Найти:
а) число, получаемое при прочтении его цифр справа налево;
б) число, получаемое в результате приписывания по двойке в начало и конец записи исходного числа;
в) число, получаемое в результате удаления из него всех цифр а;
г) число, получаемое из исходного перестановкой его первой и последней цифр;
д) число, образованное из исходного приписыванием к нему такого же числа.

W5.24. Известен факториал числа. Найти это число (факториал числа n равен 1 ·2 · … ·n).

W5.25. Дано натуральное число. Определить номер цифры 3 в нем, считая от конца числа. Если такой цифры нет, ответом должно быть число 0, если таких цифр в числе несколько — должен быть определен номер самой правой из них.

W5.26. Дано натуральное число. Определить сумму m его последних цифр. Если заданное число — менее чем m-значное, то «недостающие» цифры при решении задачи не обрабатывать.

W5.27. Дано натуральное число. Найти его наименьший делитель, отличный от 1.

W5.28. Используя метод деления отрезка пополам, найти приближенное (с точностью 0,001) значение корня уравнения f(x)=0 на отрезке [a, b]:
а) f(x) = x4 + 2x3 — x -1; a=0, b=1;
б) f(x) = x3 — 0,2x2 — 0,2x -1,2; a=1, b=1,5.


NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.


Помощь проекту:

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
21 комментариев
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

W5. Разные задачи на циклы с условиемСильно длинные посты делать нельзя, так что поделено на 2 части.
Часть 1

using System;
//W5. Разные задачи на циклы с условием
namespace W5
{
    class Program
    {
        static double Input(string Name, double Min = double.MinValue, double Max = double.MaxValue, double Exception1 = double.MinValue)
        {
            double Num;
            Console.WriteLine($"Введите {Name}:");
            while (!(double.TryParse(Console.ReadLine(), out Num) && Num > Min && Num < Max && Num != Exception1)) Console.WriteLine($"Введено неверное значение, введите {Name}");
            return Num;
        }
        static void Main()
        {
            //W5.1
            Console.WriteLine("W5.1. Имеется фрагмент программы в виде оператора цикла с параметром, обеспечивающий вывод на экран «столбиком» всех целых чисел от 10 до 30. Оформить этот фрагмент в виде:\nа) оператора цикла с предусловием;\nб) оператора цикла с постусловием.");
            int N1A=10;
            while (N1A <= 30)
            {
                Console.WriteLine(N1A);
                N1A++;
            }
            int N1B = 10;
            do
            {
                Console.WriteLine(N1B);
                N1B++;
            }
            while (N1B <= 30);
            Console.ReadKey();
            Console.Clear();
            //W5.2
            Console.WriteLine("W5.2. Имеется фрагмент программы в виде оператора цикла с параметром, обеспечивающий вывод на экран «столбиком» всех целых чисел от 100 до 80. Оформить этот фрагмент в виде: \nа) оператора цикла с предусловием; \nб) оператора цикла с постусловием.");
            for (int a = 100; a >= 80; a--) Console.WriteLine(a);
            for (int b=100; ;b--)
            {
                Console.WriteLine(b);
                if (b == 80) break;
            }
            Console.ReadKey();
            Console.Clear();
            //W5.3
            Console.WriteLine("W5.3. Имеется фрагмент программы в виде оператора цикла с параметром, обеспечивающий вывод на экран «столбиком» квадратного корня из всех целых чисел от a до b (a > b). Оформить этот фрагмент в виде: \nа) оператора цикла с предусловием;\nб) оператора цикла с постусловием.");
            int N3A = (int)Input("число A", int.MinValue, int.MaxValue);
            int N3B = (int)Input("Число B", int.MinValue, N3A-1);
            for (int a = N3A; a >= N3B; a--) Console.WriteLine(Math.Sqrt(a));
            for (int b = N3A; ;b--)
            {
                Console.WriteLine(Math.Sqrt(b));
                if (b == N3B) break;
            }
            Console.ReadKey();
            Console.Clear();
            //W5.4
            Console.WriteLine("W5.4. Дано натуральное число. Определить: \nа) количество цифр в нем;\nб) сумму его цифр;\nв) произведение его цифр;\nг) среднее арифметическое его цифр;\nд) сумму квадратов его цифр;\nе) сумму кубов его цифр;\nж) его первую цифру;\nз) сумму его первой и последней цифр.");
            long N4 = (long)Input("Натуральное число");
            int N4count = 0;
            int N4sum = 0;
            int N4product = 1;
            int N4SqSum = 0;
            int N4CubeSum = 0;
            int N4first = -1;
            int N4last = -1;
            int N4temp;
            while (N4>0)
            {
                N4count++;
                N4temp = (int)(N4 % 10);
                N4sum += N4temp;
                N4product *= N4temp;
                N4SqSum += (int) Math.Pow(N4temp, 2);
                N4CubeSum += (int)Math.Pow(N4temp, 3);
                if (N4count == 1) N4last = N4temp;
                if (N4 < 10) N4first = N4temp;
                N4 /= 10;
            }
            Console.WriteLine($"\nа) количество цифр в нем = {N4count};\nб) сумму его цифр = {N4sum};\nв) произведение его цифр = {N4product};\nг) среднее арифметическое его цифр = {(N4sum/(double)N4count)};\nд) сумму квадратов его цифр = {N4SqSum};\nе) сумму кубов его цифр = {N4CubeSum};\nж) его первую цифру = {N4first};\nз) сумму его первой и последней цифр = {N4first+N4last}");
            Console.ReadKey();
            Console.Clear();
            //W5.5
            Console.WriteLine("W5.5. Известны оценки по информатике каждого из 20 учеников класса. В начале списка перечислены все пятерки, затем все остальные оценки. Сколько учеников имеют по информатике оценку «5»? Условный оператор не использовать. Рассмотреть два случая:\n1) известно, что пятерки имеют не все ученики класса;\n2) допускается, что пятерки могут иметь все ученики класса.");
            Random R5 = new Random();
            int[] N5M = new int[20];
            for (int a = 0; a < N5M.Length; a++) N5M[a] = R5.Next(2, 6);
            Array.Sort(N5M);
            Array.Reverse(N5M);
            foreach (int b in N5M) Console.Write(b + " ");
            int[] N5Mgrade = new int[4];
            Array.Fill(N5Mgrade, 0);
            int N5count = 0;
            while (N5count<N5M.Length)
            {
                N5Mgrade[N5M[N5count] - 2]++;
                N5count++;
            }
            Console.WriteLine(N5Mgrade[3]==20?"\nВсе ученики в классе имеют пятерки":$"\n{N5Mgrade[3]} учеников в классе имеют пятерки");
            Console.ReadKey();
            Console.Clear();
            //W5.6
            Console.WriteLine("W5.6. Известны сведения о количестве осадков, выпавших за каждый день мая. Первого мая осадков не было. Определить, в течение какого количества первых дней месяца непрерывно, начиная с первого мая, осадков не было? Условный оператор не использовать. Рассмотреть два случая: \n1) известно, что в какие - то дни мая осадки выпадали;\n2) допускается, что осадков могло не быть ни в какой день мая.");
            Random R6 = new Random();
            int[] N6M = new int[31];
            for (int a = 0; a < N6M.Length; a++)
            {
                N6M[a] = R6.Next(0, 2);
                Console.Write(N6M[a] + " ");
            }
            int N6count = 0;
            while (N6count<N6M.Length && N6M[N6count]==0)
            {
                N6count++;
            }
            Console.WriteLine(N6count==31?"\nВ мае не было осадков":$"\nВ течении первых {N6count} дней мая, осадков не было");
            Console.ReadKey();
            Console.Clear();
            //W5.7
            Console.WriteLine("W5.7. Напечатать минимальное число, большее 200, которое нацело делится на 17.");
            int N7 = 200;
            while (N7 % 17 != 0) N7++;
            Console.WriteLine(N7);
            Console.ReadKey();
            Console.Clear();
            //W5.8
            Console.WriteLine("W5.8. Найти максимальное из натуральных чисел, не превышающих 5000, которое нацело делится на 39.");
            int N8 = 39;
            int N8A=0;
            while (N8 <= 5000)
            {
                if (N8 % 39 == 0) N8A = N8;
                N8++;
            }
            Console.WriteLine(N8A);
            Console.ReadKey();
            Console.Clear();
            //W5.9
            Console.WriteLine("W5.9. Известны данные о росте 15 юношей класса, упорядоченные по убыванию. Нет ни одной пары учеников, имеющих одинаковый рост. В начале учебного года в класс поступил новый ученик. Какое место в перечне ростов займет рост этого ученика? Известно, что его рост не совпадает с ростом ни одного из учеников класса, превышает рост самого низкого ученика и меньше роста самого высокого. Условный оператор не использовать.");
            Random R9 = new Random();
            int[] N9M = new int[15];
            for (int a = 0; a < N9M.Length; a++)
            {
                bool B9 = true;
                while (B9)
                {
                    B9 = false;
                    N9M[a] = R9.Next(150, 210);
                    if (a > 0)
                    {
                        for (int b = 0; b < a; b++)
                        {
                            if (N9M[a] == N9M[b]) B9 = true;
                        }
                    }
                }    
            }
            Array.Sort(N9M);
            Array.Reverse(N9M);
            Console.WriteLine("Рост учеников класса: ");
            foreach (int c in N9M) Console.Write(c + " ");
            int N9new=-1;
            bool B9new = true;
            while (B9new)
            {
                B9new = false;
                N9new = R9.Next(N9M[N9M.Length-1]+1, N9M[0]);
                for (int c = 0; c < N9M.Length; c++)
                {
                    if (N9new == N9M[c]) B9new = true;
                }
            }
            Console.WriteLine($"\nРост нового ученика - "+N9new);
            int N9count = 0;
            while (N9M[N9count] > N9new) N9count++;
            Console.WriteLine($"Новый ученик займет {N9count+1} место в перечне");
            Console.ReadKey();
            Console.Clear();
            //W5.10
            Console.WriteLine("W5.10. Известно количество очков, набранных каждой из 20-ти команд-участниц первенства по футболу. Перечень очков дан в порядке убывания (ни одна пара команд не набрала одинаковое количество очков). Определить, какое место заняла команда, набравшая N очков (естественно, что значение N имеется в перечне). Условный оператор не использовать.");
            Random R10 = new Random();
            int[] N10Point = new int[20];
            for (int a = 0; a < N10Point.Length; a++)
            {
                bool B10 = true;
                do
                {
                    N10Point[a] = R10.Next(50, 101);
                    if (a>0)
                    {
                        B10 = true;
                        for (int b = 0; b < a; b++)
                        {
                            if (N10Point[a] == N10Point[b]) B10 = false;
                        }
                    }
                }
                while (!B10);
            }
            Array.Sort(N10Point);
            Array.Reverse(N10Point);
            foreach (int c in N10Point) Console.Write(c + " ");
            Console.WriteLine();
            int N10find=0;
            bool B10find = false;
            while (!B10find)
            {
                N10find = (int)Input("количество очков искомой команды",50,101);
                for (int d = 0; d<N10Point.Length;d++)
                {
                    if (N10find == N10Point[d]) B10find = true;
                }
            }
            int N10count = 0;
            while (N10Point[N10count] != N10find) N10count++;
            Console.WriteLine($"Искомая команда заняла {N10count+1} место");
            Console.ReadKey();
            Console.Clear();
            //W5.11
            Console.WriteLine("W5.11. Гражданин 1 марта открыл счет в банке, вложив 1000 руб. Через каждый месяц размер вклада увеличивается на 2% от имеющейся суммы. Определить:\nа) за какой месяц величина ежемесячного увеличения вклада превысит 30 руб.;\nб) через сколько месяцев размер вклада превысит 1200 руб.");
            int N11month = 0;
            double N11 = 1000;
            double N11dif = 0;
            int N11sum = 0;
            int N11val = 0;
            while (N11dif<30 || N11<1200)
            {
                N11dif = ((N11 * 1.02) - N11);
                N11 *= 1.02;
                N11month++;
                if (N11sum==0 && N11 > 1200) N11sum = N11month;
                if (N11val == 0 && N11dif > 30) N11val = N11month;
                Console.WriteLine($"Через {N11month} месяц прирост {N11dif:f2}, сумма вклада {N11:f2}");
            }
            Console.WriteLine($"а) величина ежемесячного увеличения вклада превысит 30 руб за {N11val} месяц;\nб) размер вклада превысит 1200 руб через {N11sum} месяцев");
            Console.ReadKey();
            Console.Clear();
            //W5.12
            Console.WriteLine("W5.12.. Начав тренировки, лыжник в первый день пробежал 10 км. Каждый следующий день он увеличивал пробег на 10% от пробега предыдущего дня. Определить: \nа) в какой день он пробежит больше 20 км;\nб) в какой день суммарный пробег за все дни превысит 100 км.");
            double N12 = 10;
            double N12sum = 10;
            int N12day = 1;
            int N12dayDist = 0;
            int N12daySum = 0;
            while (N12<20 || N12sum < 100)
            {
                N12 *= 1.1;
                N12sum += N12;
                N12day++;
                if (N12dayDist == 0 && N12 > 20) N12dayDist = N12day;
                if (N12daySum == 0 && N12sum > 100) N12daySum = N12day;
                Console.WriteLine($"{N12day} день - {N12:f3} км, суммарно {N12sum:f3} км");
            }
            Console.WriteLine($"Лыжник пробежал больше 20 км за день на {N12dayDist} день, а суммарный пробег превысил 100 км на {N12daySum} день");
            Console.ReadKey();
            Console.Clear();
            //W5.13
            Console.WriteLine("W5.13. В некотором году (назовем его условно первым) на участке в 100 гектаров средняя урожайность ячменя составила 20 центнеров с гектара. После этого каждый год площадь участка увеличивалась на 5%, а средняя урожайность на 2%. Определить: \nа) в каком году урожайность превысит 22 центнера с гектара;\nб) в каком году площадь участка станет больше 120 гектаров;\nв) в каком году общий урожай, собранный за все время, начиная с первого года, превысит 800 центнеров.");
            int N13year = 1;
            double N13area = 100;
            double N13product = 20;
            double N13productTotal = N13area * N13product;
            int N13areaYear = 0;
            int N13productYear = 0;
            int N13productTotalYear = 0;
            while (N13product < 22 || N13area < 120 || N13productTotal < 800)
            {
                if (N13productTotalYear == 0 && N13productTotal > 800) N13productTotalYear = N13year; //ㄟ( ▔, ▔ )ㄏ
                N13area *= 1.05;
                N13product *= 1.02;
                N13productTotal += N13area * N13product;
                N13year++;
                if (N13productYear == 0 && N13product > 22) N13productYear = N13year;
                if (N13areaYear == 0 && N13area > 120) N13areaYear = N13year;
                Console.WriteLine($"На {N13year} год засеивалась площадь {N13area:f2} га с урожайностью {N13product:f2} центнеров с га, в этом году было собрано {N13area*N13product:f2} центнеров, всего с первого года было собрано {N13productTotal:f2} центнеров");
            }
            Console.WriteLine($"\nа) в {N13productYear} году урожайность превысит 22 центнера с гектара;\nб) в {N13areaYear} году площадь участка станет больше 120 гектаров;\nв) в {N13productTotalYear} году общий урожай, собранный за все время, начиная с первого года, превысит 800 центнеров.");
            Console.ReadKey();
            Console.Clear();
            //W5.14
            Console.WriteLine("W5.14. Найти наибольший общий делитель двух заданных натуральных чисел, используя алгоритм Евклида.");
            int N14A = (int)Input("натуральное число A", int.MinValue, int.MaxValue);
            int N14B = (int)Input("натуральное число B", int.MinValue, int.MaxValue);
            int N14temp;
            if (N14B > N14A) {N14temp=N14A; N14A = N14B; N14B = N14temp; }
            while(N14A!=0)
            {
                if ((N14A - N14B) < 0) { N14B -= N14A; continue; }
                N14A -= N14B;
            }
            Console.WriteLine(N14B);
            Console.ReadKey();
            Console.Clear();
            //W5.15
            Console.WriteLine("W5.15. Найти наименьшее общее кратное двух заданных натуральных чисел.");
            int N15A = (int)Input("натуральное число A", int.MinValue, int.MaxValue);
            int N15B = (int)Input("натуральное число B", int.MinValue, int.MaxValue);
            int N15period = 1;
            int N15temp;
            if (N15B > N15A) { N15temp=N15B; N15B = N15A; N15A = N15temp; }
            while ((N15A * N15period) % N15B != 0) N15period++;
            Console.WriteLine(N15period*N15A);
            Console.ReadKey();
            Console.Clear();
            //W5.16
            Console.WriteLine("W5.16. Даны натуральные числа a и b, обозначающие соответственно числитель и знаменатель дроби. Сократить дробь, т. е. найти такие натуральные числа p и q, не имеющие общих делителей, что p/q = a/b.");
            int N16A = (int)Input("числитель");
            int N16B = (int)Input("знаменатель");
            int N16temp1=0;
            int N16temp2=0;
            if (N16A > N16B) { N16temp1 = N16A; N16temp2 = N16B; }
            else { N16temp1 = N16B; N16temp2 = N16A; }
            while (N16temp1!=0)
            {
                if (N16temp1 < N16temp2) { N16temp2 -= N16temp1; continue; }
                N16temp1 -= N16temp2;
            }
            int N16P = N16A/N16temp2;
            int N16Q = N16B/N16temp2;
            Console.WriteLine(N16temp2==1?"Дробь нельзя сократить":$"{N16A}/{N16B} = {N16P}/{N16Q}");
            Console.ReadKey();
            Console.Clear();

W5. Разные задачи на циклы с условиемЧасть 2

            //W5.17
            Console.WriteLine("W5.17. Дан прямоугольник с размерами 425 х 131 . От него отрезают квадраты со стороной 131, пока это возможно. Затем от оставшегося прямоугольника вновь отрезают квадраты со стороной, равной 425 — 131·3 = 32, и т. д. На какие квадраты и в каком их количестве будет разрезан исходный прямоугольник?");
            int N17large = 425;
            int N17small = 131;
            int N17temp;
            int N17count = 0;
            int[] N17num = new int[10];
            int[] N17numCount = new int[10];
            while (N17large!=0)
            {
                if (N17large >= N17small)
                {
                    N17large -= N17small;
                    N17num[N17count] = N17small;
                    N17numCount[N17count]++;
                }
                else
                {
                    N17count++;
                    N17temp = N17large;
                    N17large = N17small;
                    N17small = N17temp;
                }
            }
            Console.WriteLine($"От прямоугольника было отрезано ");
            for (int a = 0; N17num[a] != 0 || N17numCount[a] !=0; a++) Console.WriteLine($"{N17numCount[a]} квадратов по {N17num[a]};");
            Console.ReadKey();
            Console.Clear();
            //W5.18
            Console.WriteLine("W5.18. Дан прямоугольник с размерами a x b. От него отрезают квадраты максимального размера, пока это возможно. Затем от оставшегося прямоугольника вновь отрезают квадраты максимально возможного размера и т. д. На какие квадраты и в каком их количестве будет разрезан исходный прямоугольник?");
            int N18A = (int)Input("сторону прямоугольника A", int.MinValue , int.MaxValue);
            int N18B = (int)Input("сторону прямоугольника B", int.MinValue, int.MaxValue);
            int N18large = Math.Max(N18A, N18B);
            int N18small = Math.Min(N18A, N18B);
            int N18temp;
            int N18count = 0;
            int[] N18num = new int[100];
            int[] N18numCount = new int[100];
            while (N18large != 0)
            {
                if (N18large>=N18small)
                {
                    N18large -= N18small;
                    N18num[N18count]=N18small;
                    N18numCount[N18count]++;
                }
                else
                {
                    N18count++;
                    N18temp = N18small;
                    N18small = N18large;
                    N18large = N18temp;
                }
            }
            Console.WriteLine("Прямоугольник может быть разделен на квадраты:");
            for (int a = 0; N18numCount[a] != 0; a++) Console.WriteLine($"{N18numCount[a]} квадратов по {N18num[a]}");
            Console.ReadKey();
            Console.Clear();
            //W5.19
            Console.WriteLine("W5.19. Даны целые числа a и b (a > b). Определить:\nа) результат целочисленного деления a на b, не используя стандартную операцию целочисленного деления;\nб) остаток от деления a на b, не используя стандартную операцию вычисления остатка.");
            int N19A = (int)Input("Число А", int.MinValue, int.MaxValue);
            int N19B = (int)Input("Число B", int.MinValue, N19A);
            int N19X=0;
            while (N19A>=N19B)
            {
                N19A -= N19B;
                N19X++;
            }
            Console.WriteLine($"Результат целочисленного деления {N19X}, остаток от деления {N19A}");
            Console.ReadKey();
            Console.Clear();
            //W5.20
            Console.WriteLine("W5.20. Даны натуральные числа m и n. Получить все кратные им числа, не превышающие m·n. Условный оператор не использовать. Задачу решить двумя способами.");
            int N20M = (int)Input("число M");
            int N20N = (int)Input("число N");
            int[] N20M1 = new int[100];
            int[] N20M2 = new int[100];
            int N20temp=1;
            int N20count = 0;
            while ((N20temp*Math.Min(N20M,N20N)) < N20M*N20N)
            {
                while ((N20temp * Math.Min(N20M,N20N)) % Math.Max(N20M,N20N) != 0)
                {
                    N20temp++;
                }
                N20M1[N20count] = (N20temp * Math.Min(N20M,N20N));
                N20temp++;
                N20count++;
            }
            for (int a = 0; N20M1[a] > 0; a++) Console.Write(N20M1[a]+" ");
            Console.WriteLine();
            N20temp = N20N* N20M;
            N20count = 0;
            while (N20temp > Math.Min(N20M,N20N))
            {
                while (N20temp % N20M !=0 || N20temp % N20N !=0)
                {
                    N20temp--;
                }
                N20M2[N20count] = N20temp;
                N20count++;
                N20temp--;
            }
            for (int b = 0; N20M2[b] > 0; b++) Console.Write(N20M2[b] + " ");
            Console.ReadKey();
            Console.Clear();
            //W5.21
            Console.WriteLine("W5.21. В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. Дано натуральное число n. Как наименьшим количеством таких денежных купюр можно выплатить сумму n (указать количество каждой из используемых для выплаты купюр)? Предполагается, что имеется достаточно большое количество купюр всех достоинств.");
            int N21 = (int)Input("число N",int.MinValue,int.MaxValue);
            int N21count=6;
            int[] N21M = new int[7];
            while (N21>0)
            {
                if (N21 >= (Math.Pow(2, N21count)))
                {
                    N21 -= (int)Math.Pow(2, N21count);
                    N21M[N21count]++;
                }
                else N21count--;
            }
            for (int a=6; a>=0; a--)
            {
                if (N21M[a]!=0)Console.WriteLine($"{N21M[a]} купюры по {Math.Pow(2 , a)}");
            }
            Console.ReadKey();
            Console.Clear();
            //W5.22
            Console.WriteLine("W5.22. Дано натуральное число (пусть запись этого числа в десятичной системе имеет вид akak-1…a0 ). Найти:\nа) знакочередующуюся сумму цифр этого числа a0 — a1 +… +(-1)kak;\nб) знакочередующуюся сумму цифр этого числа ak — ak—1 +… +(-1)ka0;\nПримечание.В обеих задачах условный оператор и операцию возведения в степень не использовать.");
            long N22 = (long)Input("натуральное число", long.MinValue,long.MaxValue);
            int N22Asum = 0;
            int N22Bsum = 0;
            int[] N22M = new int[Convert.ToString(N22).Length];
            int N22count = 0;
            int N22temp = -1;
            while (N22>0)
            {
                N22temp *= -1;
                N22Asum += (int)(N22 % 10) * N22temp;
                N22M[N22count] = (int)(N22 % 10);
                N22count++;
                N22 /= 10;
            }
            N22count = N22M.Length -1;
            N22temp = -1;
            while (N22count>=0)
            {
                N22temp *= -1;
                N22Bsum += (N22M[N22count]*N22temp);
                N22count--;
            }
            Console.WriteLine($"Вариант А {N22Asum}\nВариант Б {N22Bsum}");
            Console.ReadKey();
            Console.Clear();
            //W5.23
            Console.WriteLine("W5.23. Дано натуральное число. Найти:\nа) число, получаемое при прочтении его цифр справа налево;\nб) число, получаемое в результате приписывания по двойке в начало и конец записи исходного числа;\nв) число, получаемое в результате удаления из него всех цифр а;\nг) число, получаемое из исходного перестановкой его первой и последней цифр;\nд) число, образованное из исходного приписыванием к нему такого же числа.");
            int N23 = (int)Input("натуральное число", int.MinValue, int.MaxValue);
            int N23reverse = 0;
            long N23add2 = 0;
            int N23A = (int)Input("цифру А", 0, 9);
            int N23deleteA = 0;
            int N23deleteACount = 0;
            int N23firstLast = 0;
            int N23first = 0;
            int N23last = 0;
            long N23double = (long) N23;
            int N23count = 0;
            int N23temp;
            while (N23>0)
            {
                N23temp = N23 % 10;
                //a)
                N23reverse = (N23reverse * 10) + N23temp;
                //б) + переменные для г)
                if (N23count == 0)
                {
                    N23add2 = (N23temp * 100) + 22;
                    N23last = N23temp;
                }
                if (N23count != 0) N23add2 += N23temp * (int) Math.Pow(10, N23count + 2);
                if (N23 < 10)
                {
                    N23add2 += 22 * (int)Math.Pow(10, N23count + 3);
                    N23first = N23temp;
                }
                //в)
                if (N23temp != N23A)
                {
                    N23deleteA += N23temp * (int)Math.Pow(10, N23deleteACount);
                    N23deleteACount++;
                }
                //г)
                if (N23count != 0 && N23 >= 10) N23firstLast += N23temp * (int)Math.Pow(10,N23count);
                if (N23 < 10)
                {
                    N23firstLast += N23last * (int)Math.Pow(10, N23count);
                    N23firstLast += N23first;
                }
                N23count++;
                N23 /= 10;
            }
            //д)
            N23double += N23double * (long)Math.Pow(10, N23count);
            Console.WriteLine($"\nа) число, получаемое при прочтении его цифр справа налево {N23reverse} ;\nб) число, получаемое в результате приписывания по двойке в начало и конец записи исходного числа {N23add2} ;\nв) число, получаемое в результате удаления из него всех цифр а {N23deleteA};\nг) число, получаемое из исходного перестановкой его первой и последней цифр {N23firstLast} ;\nд) число, образованное из исходного приписыванием к нему такого же числа {N23double}");
            Console.ReadKey();
            Console.Clear();
            //W5.24
            Console.WriteLine("W5.24. Известен факториал числа. Найти это число (факториал числа n равен 1 ·2 · … ·n).");
            int N24 = (int)Input("факториал числа", int.MinValue, int.MaxValue);
            int N24div=1;
            bool B24 = true;
            do
            {
                N24div++;
                if (N24%N24div!=0)
                {
                    B24 = false;
                    break;
                }
                N24 /= N24div;
            }
            while (N24 != 1);
            Console.WriteLine(B24?$"Исходное число {N24div}":"Введенное число не является факториалом");
            Console.ReadKey();
            Console.Clear();
            //W5.25
            Console.WriteLine("W5.25. Дано натуральное число. Определить номер цифры 3 в нем, считая от конца числа. Если такой цифры нет, ответом должно быть число 0, если таких цифр в числе несколько — должен быть определен номер самой правой из них.");
            int N25 = (int)Input("натуральное число", int.MinValue, int.MaxValue);
            int N25n3 = 0;
            int N25count = 1;
            while (N25>0)
            {
                if (N25 % 10 == 3 && N25n3 == 0) N25n3 = N25count;
                N25count++;
                N25 /= 10;
            }
            Console.WriteLine(N25n3);
            Console.ReadKey();
            Console.Clear();
            //W5.26
            Console.WriteLine("W5.26. Дано натуральное число. Определить сумму m его последних цифр. Если заданное число — менее чем m-значное, то «недостающие» цифры при решении задачи не обрабатывать.");
            int N26 = (int)Input("натуральное число", int.MinValue, int.MaxValue);
            int N26M = (int)Input("количество последних знаков числа для суммирования", int.MinValue, int.MaxValue);
            int N26sum = 0;
            int N26count = 0;
            while (N26count < N26M && N26 > 0)
            {
                N26sum += N26 % 10;
                N26count++;
                N26 /= 10;
            }
            Console.WriteLine($"Сумма последних {N26count} чисел равна {N26sum}");
            Console.ReadKey();
            Console.Clear();
            //W5.27
            Console.WriteLine("W5.27. Дано натуральное число. Найти его наименьший делитель, отличный от 1.");
            int N27 = (int)Input("натуральное число", int.MinValue, int.MaxValue);
            int N27div = 2;
            while (N27 % N27div != 0) N27div++;
            Console.WriteLine(N27div);
            Console.ReadKey();
            Console.Clear();
            //W5.28 Ничего не понял, что надо сделать - просто взял алгоритм из википедии.
            Console.WriteLine("W5.28. Используя метод деления отрезка пополам, найти приближенное (с точностью 0,001) значение корня уравнения f(x)=0 на отрезке [a, b]:\nа) f(x) = x4 + 2x3 — x - 1; a = 0, b = 1;\nб) f(x) = x3 — 0,2x2 — 0,2x - 1,2; a = 1, b = 1,5.");
            double N28Xa = 0;
            double N28Xb = 1;
            double N28mid=0;
            double N28diff;
            while (N28Xb-N28Xa>0.001)
            {
                N28diff = (N28Xb - N28Xa) / 2;
                N28mid = N28Xa + N28diff;
                if ((Math.Sign(Math.Pow(N28Xa, 4) + 2 * Math.Pow(N28Xa, 3) - N28Xa - 1)) != (Math.Sign(Math.Pow(N28mid, 4) + 2 * Math.Pow(N28mid, 3) - N28mid - 1))) N28Xb = N28mid;
                else N28Xa = N28mid;
            }
            Console.WriteLine($"а) {N28mid:f3}");
            double N28Ya = 1;
            double N28Yb = 1.5;
            while (N28Yb - N28Ya > 0.001)
            {
                N28diff = (N28Yb - N28Ya) / 2;
                N28mid = N28Ya + N28diff;
                if ((Math.Sign(Math.Pow(N28Ya, 3) - 0.2 * Math.Pow(N28Ya, 2) - 0.2*N28Ya - 1.2)) != (Math.Sign(Math.Pow(N28mid, 3) - 0.2 * Math.Pow(N28mid, 2) - 0.2 * N28mid - 1.2))) N28Yb = N28mid;
                else N28Ya = N28mid;
            }
            Console.WriteLine($"б) {N28mid:f3}");
            Console.ReadKey();
            Console.Clear();
        }
    }
}

Подскажите , как сделать задание W5.19?

Подскажите, как решить задание W5.19?

W5.25. Дано натуральное число. Определить номер цифры 3 в нем, считая от конца числа. Если такой цифры нет, ответом должно быть число 0, если таких цифр в числе несколько — должен быть определен номер самой правой из них.

static void Main(string[] args)
        {
            int number;
            Console.Write("number=");
            number = int.Parse(Console.ReadLine());
            int numOfThree = 1;
            int count=1;
            while(number>0)
            {
                count = number % 10;
                number /= 10;
                if(count==3)
                {
                    break;
                }
                numOfThree++;
            }
            if(count!=3)
            {
                numOfThree = 0;
                Console.WriteLine($"{numOfThree} - there id no number 3 in the given number");
            }
            else
            {
                Console.WriteLine($"count of number 3 - {numOfThree}");
            }
        }

Алексей В, вроде бы верно, но есть существенные недочеты:
— плохие имена, иногда противоположные (например count)
— можно на много проще (на что можно заменить break и как можно избавить от count и как можно избавиться от последнего if)

Важно: Вы можете поддержать проект и автора.

W5.1. Имеется фрагмент программы в виде оператора цикла с параметром, обеспечивающий вывод на экран «столбиком» всех целых чисел от 10 до 30. Оформить этот фрагмент в виде:
а) оператора цикла с предусловием;
б) оператора цикла с постусловием.
// предусловие
for (int i = 10; i < 31; i++)
{
Console.WriteLine(i);
}
// Постусловие
int a = 10;
while (a < 31)
Console.WriteLine(a++);

}
}
}

W5.2. Имеется фрагмент программы в виде оператора цикла с параметром, обеспечивающий вывод на экран «столбиком» всех целых чисел от 100 до 80. Оформить этот фрагмент в виде:
а) оператора цикла с предусловием;
б) оператора цикла с постусловием.

int i = 100;
while (i >= 80)
{
   Console.WriteLine($"{i}");
   i--;
}
//    ___________________________
int k = 100;
do
{
   Console.WriteLine($"{k}");
   k--;
} while (k >= 80);
Важно: Вы можете поддержать проект и автора.

W5.1. Имеется фрагмент программы в виде оператора цикла с параметром, обеспечивающий вывод на экран «столбиком» всех целых чисел от 10 до 30. Оформить этот фрагмент в виде:
а) оператора цикла с предусловием;
б) оператора цикла с постусловием.

int i = 10;
while (i <= 30)
{
   Console.WriteLine($"{i}");
   i++;
}
//   ______________________
int k = 10;
do
{
   Console.WriteLine($"{k}");
   k++;
} while (k <= 30);
Важно: Вы можете поддержать проект и автора.

W5.5. Известны оценки по информатике каждого из 20 учеников класса. В начале списка перечислены все пятерки, затем все остальные оценки. Сколько учеников имеют по информатике оценку «5»? Условный оператор не использовать. Рассмотреть два случая:
1) известно, что пятерки имеют не все ученики класса;
2) допускается, что пятерки могут иметь все ученики класса.
Не очень поняла насчет этих 2-х случаев, поэтому взяла рандомное расставление оценок. В textBox7 выводятся все оценки, в textBox8 — число пятерок.

int sum = 0;
int[] array = new int[20];
// string[] str = new string[array.Length]; - лишний
Random rnd = new Random();
for (int i = 0; i < array.Length; i++)
{
    //textBox7.Text += array[i].ToString() + "\n\t"; 
    // вместо него - следующий:
    Console.WriteLine("оценка - " + array[i]);
    while (array[i] == 5)
    {
       sum++;
       //textBox8.Text = sum.ToString(); // - лишний
       break;
   }
}
Console.WriteLine("ответ - " + sum);  // добавлен вывод результата
Сonsole.ReadKey();
Важно: Вы можете поддержать проект и автора.

Задача W5.4. Дано натуральное число. Определить:
а) количество цифр в нем;
б) сумму его цифр;
в) произведение его цифр;
г) среднее арифметическое его цифр;
д) сумму квадратов его цифр;
е) сумму кубов его цифр;
ж) его первую цифру;
з) сумму его первой и последней цифр.

int chisloconst = Convert.ToInt32(Console.ReadLine()); 
int chifri, sum = 0, mult = 1, sos = 0, soc = 0, fd = 0, chislo = chisloconst;
for (chifri = 0; chislo > 0; chislo = chislo / 10, chifri++)    // вычисление количества цифр
{
   fd = chislo % 10;               // вычисление первой цифры
   sum = sum + fd;                 // вычисление суммы цифр
   mult = mult * fd;               // вычисление произведения цифр
   sos = sos + (fd * fd);          // вычисление суммы квадратов
   soc = soc + (fd * fd * fd);     // вычисление суммы кубов
}
Console.WriteLine(chifri);   // вывод количества цифр    
Console.WriteLine(sum);      // вывод суммы цифр
Console.WriteLine(mult);     // вывод произведения цифр
Console.WriteLine("{0:0.00}", ((double)sum / chifri));          // вывод среднего арифметического цифр
Console.WriteLine(sos);      // вывод суммы квадратов цифр
Console.WriteLine(soc);      // вывод суммы кубов цифр
Console.WriteLine(fd);       // вывод первой цифры
Console.WriteLine(fd + (chisloconst % 10)); // вывод суммы первой и последней цифр

Задача W5.7. Напечатать минимальное число, большее 200, которое нацело делится на 17.

int i;
for (i = 201; (i % 17) != 0; i++);
   Console.WriteLine(i);
Важно: Вы можете поддержать проект и автора.

5.7
Console.WriteLine(«Enter natural number: «);
int num = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(«Enter denominator: «);
int den = Convert.ToInt32(Console.ReadLine());
int x=0;
for (int i = 1; i <= num / den; i++)
{
  x = den * i;
}
Console.WriteLine($»minimum number greater than natural number = {x + den} «);

W5.3 Имеется фрагмент программы в виде оператора цикла с параметром, обеспечивающий вывод на экран «столбиком» квадратного корня из всех целых чисел от a до b (a > b).
Оформить этот фрагмент в виде:
а) оператора цикла с предусловием;
б) оператора цикла с постусловием.

int a = 16, b = 4;
// оператор цикла с предусловием
while (a >= b)
{
   Console.WriteLine("Корень числа " + a + " равен: " + Math.Sqrt(a));
   a--;
}
Console.WriteLine(" — or —");
// оператор цикла с постусловием.
a = 16;
do
{
   Console.WriteLine("Корень числа " + a + " равен: " + Math.Sqrt(a));
   a--;
} while (a >= b);
Важно: Вы можете поддержать проект и автора.
Важно: Вы можете поддержать проект и автора.
static void Main(string[] args)
{
   int i;
   Console.WriteLine("Вывод чисел с предусловием");
   for (i = 100; i >= 80; i--) //цикл с предусловием
      Console.WriteLine("Число: {0}", i);
   Console.WriteLine("——————");
   i = 100;
   Console.WriteLine("Вывод чисел с постусловием");
   do // цикл с постусловием
   {
      Console.WriteLine("Число: {0}", i);
      i--;
   } while (i >= 80);
    Console.ReadKey();
}
Важно: Вы можете поддержать проект и автора.
21
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x