Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/35: Рейтинг темы: голосов - 35, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 09.12.2019
Сообщений: 85
1

Вывод чисел в строку через while и функцию строки PadLeft

01.01.2020, 11:56. Показов 6421. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем Привет! И С новым Годом!

сделал программу которая должна делать следующее выводить числа ровно, чтобы они были друг под другом. Использовать функцию строки PadLeft. И чтобы была возможность задать начальное и конечное число, и по сколько чисел в строке выводить

Помогите пожалуйста, программа работает но первый элемент всегда на своей строке отдельной см картинку ниже

И я ни как не могу избавиться от дублирования кода (вот этого Console.Write(" " + i.ToString().PadLeft(quantityPerLine+1, ' ')) ) в конструкции if/else, можно ли как то без него?



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 Console.WriteLine("Программа построчно распечатывает вводимое количество чисел в строке в задаваемом интервале");
 
            Console.WriteLine("Введите начало диапазона");
            int start = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Введите конец диапазона");
            int end = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Введите количество чисел в строке");
            int quantityPerLine = Convert.ToInt32(Console.ReadLine());
 
            int i = start;
 
            while (i <= end)
            {
                if (i % quantityPerLine != 0)
                {
                    Console.Write(" " + i.ToString().PadLeft(quantityPerLine+1, ' '));
                }
                else
                {
                    Console.WriteLine(" " + i.ToString().PadLeft(quantityPerLine, ' '));
                }
 
                i++;
            }
 
            Console.ReadKey();
Миниатюры
Вывод чисел в строку через while и функцию строки PadLeft  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2020, 11:56
Ответы с готовыми решениями:

Как использовать функцию PadLeft?
Подскажите как использовать PadLeft? нашел на сайте пример http://asd-soft.ru/tstringhelper-delphi/...

Нахождение основных значений оформить через функцию RESHENIE(), ввод данных и вывод на печать через функцию MAIN()
а помогите теперь эту задачку #include &lt;iostream&gt; int main() { int last = 0, next = 1; ...

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

Вывод строки чисел без пробелов, а затем вывод значения в виде списка чисел
Определить функцию (Z1 k n), где k&lt;n, которая сначала выводит строку чисел без пробелов k k+1 k+2...

24
9 / 8 / 1
Регистрация: 18.05.2009
Сообщений: 40
01.01.2020, 12:40 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
            Console.WriteLine("Программа построчно распечатывает вводимое количество чисел в строке в задаваемом интервале");
 
            Console.WriteLine("Введите начало диапазона");
            int start = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Введите конец диапазона");
            int end = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Введите количество чисел в строке");
            int quantityPerLine = Convert.ToInt32(Console.ReadLine());
            int count = 0;
            for (int i = start; i <= end; i ++)
            {
                Console.Write(" " + i.ToString().PadLeft(quantityPerLine + 1, ' '));
                count++;
                if (count == quantityPerLine)
                {
                    Console.WriteLine();
                    count = 0;
                }
            }
            Console.ReadKey();
может, так?
1
2636 / 1564 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
01.01.2020, 13:23 3
Или так
C#
1
2
3
4
5
6
7
8
9
10
11
12
int i = 0;
 
while (i <= (end - start))
{
    Console.Write(" " + (start + i).ToString().PadLeft(quantityPerLine, ' '));
    i++;
 
    if (i % quantityPerLine == 0)
    {
        Console.WriteLine();
    }
}
1
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
01.01.2020, 13:30 4
Лучший ответ Сообщение было отмечено AlexEng как решение

Решение

AlexEng, как связано количество чисел в строке и количество пробел перед каждым числом?

Добавлено через 7 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
 
namespace CyberForum
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Программа построчно распечатывает вводимое количество чисел в строке в задаваемом интервале");
 
            Console.WriteLine("Введите начало диапазона");
            int start = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Введите конец диапазона");
            int end = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Введите количество чисел в строке");
            int quantityPerLine = Convert.ToInt32(Console.ReadLine());
 
            PrintLines(start, end, quantityPerLine);
 
            Console.ReadKey();
        }
 
        private static void PrintLines(int start, int end, int quantityPerLine)
        {
            int c = (int)Math.Log10(Math.Max(Math.Abs(start), Math.Abs(end))) + 1 + 4; // :)
            int count = 0;
            for (int i = start; i <= end; i++)
            {
                Console.Write($"{i.ToString().PadLeft(c, ' ')}");
                count++;
                if (count == quantityPerLine)
                {
                    Console.WriteLine();
                    count = 0;
                }
            }
        }
    }
}
1
Эксперт .NET
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
01.01.2020, 15:06 5
Цитата Сообщение от AlexEng Посмотреть сообщение
Использовать функцию строки PadLeft.
А это обязательно?
Обычное форматирование вывода не подходит?
1
1 / 1 / 0
Регистрация: 09.12.2019
Сообщений: 85
01.01.2020, 15:56  [ТС] 6
Парни Всем Спасибо!!! Помогли!


Цитата Сообщение от jester Посмотреть сообщение
AlexEng, как связано количество чисел в строке и количество пробел перед каждым числом?
такое условие задачи

Цитата Сообщение от kolorotur Посмотреть сообщение
А это обязательно?
Обычное форматирование вывода не подходит?
Да так задачу поставили((
0
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
01.01.2020, 17:02 7
AlexEng, всем спасибо кроме меня)) Ох

Цитата Сообщение от AlexEng Посмотреть сообщение
такое условие задачи
если чисел будет 20 то и дополнять каждое число нужно будет до 20 символов...

Добавлено через 3 минуты
kolorotur,
Цитата Сообщение от kolorotur Посмотреть сообщение
Обычное форматирование вывода не подходит?
какое форматирование?
вроде бы \t до восьми символов дополняет
1
Эксперт .NET
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
01.01.2020, 17:27 8
Цитата Сообщение от jester Посмотреть сообщение
какое форматирование?
Вот это: https://docs.microsoft.com/en-... -component
0
Модератор
Эксперт .NET
15470 / 10714 / 2788
Регистрация: 21.04.2018
Сообщений: 31,544
Записей в блоге: 2
01.01.2020, 17:39 9
Лучший ответ Сообщение было отмечено AlexEng как решение

Решение

AlexEng

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
            Console.WriteLine("Программа построчно распечатывает вводимое количество чисел в строке в задаваемом интервале");
 
            Console.WriteLine("Введите начало диапазона");
            int start = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Введите конец диапазона");
            int end = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Введите количество чисел в строке");
            int quantityPerLine = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Расстояние между числами в строке");
            int tab = Convert.ToInt32(Console.ReadLine());
 
            for (int i = 0; i <= end - start; i++)
            {
                Console.Write((i + start).ToString().PadLeft(tab + 1, ' '));
                if ((i % quantityPerLine) == quantityPerLine - 1)
                    Console.WriteLine();
            }
 
            Console.ReadKey();
Добавлено через 9 минут
AlexEng, без PadLeft
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
            Console.WriteLine("Программа построчно распечатывает вводимое количество чисел в строке в задаваемом интервале");
 
            Console.WriteLine("Введите начало диапазона");
            int start = Convert.ToInt32(Console.ReadLine()) - 1;
 
            Console.WriteLine("Введите конец диапазона");
            int end = Convert.ToInt32(Console.ReadLine()) + 1;
 
            Console.WriteLine("Введите количество чисел в строке");
            int quantityPerLine = Convert.ToInt32(Console.ReadLine());
 
            Console.WriteLine("Расстояние между числами в строке");
            int tab = Convert.ToInt32(Console.ReadLine());
 
            for (int i = 1; i < end - start; i++)
            {
                Console.Write("{0, " + tab + "}", (i + start));
                if (i % quantityPerLine == 0)
                    Console.WriteLine();
            }
 
            Console.ReadKey();
1
1 / 1 / 0
Регистрация: 09.12.2019
Сообщений: 85
04.01.2020, 20:51  [ТС] 10
Всем добрый вечер!

хочу снова поднять тему про PadLeft, помогите пожалуйста

код работает хорошо но дело в этой строке

C#
1
2
                Console.Write(" " + i.ToString().PadLeft(3, ' '));
                count++;
на месте где 3 должна стоять переменная которая отвечает за сдвиг, 3 корректно работает с числами до 1000 (тоже самое с 2, 4 только порядок чисел разный)

Цитата Сообщение от jester Посмотреть сообщение
как связано количество чисел в строке и количество пробел перед каждым числом?
то то количество пробелов не должно зависеть от количества чисел в строке это да согласен

как то можно в i.ToString().PadLeft(3, ' ') значение переменной 3 подставлять количество цифр в столбце? у меня получается количество то больше то меньше нужного?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
        static void Main(string[] args)
        {
            Console.WriteLine("Программа построчно распечатывает вводимое количество чисел в строке в задаваемом интервале");
 
            Console.Write("Введите начало диапазона = ");
            int start = Convert.ToInt32(Console.ReadLine());
 
            Console.Write("Введите конец диапазона = ");
            int end = Convert.ToInt32(Console.ReadLine());
 
            Console.Write("Введите количество чисел в строке = ");
            int quantityPerLine = Convert.ToInt32(Console.ReadLine());
 
            int i = start;
            int count = 0;
 
            while (i <= end)
            {
                Console.Write(" " + i.ToString().PadLeft(3, ' '));
                count++;
 
                if (count == quantityPerLine)
                {
                    Console.WriteLine();
                    count = 0;
                }
 
                i++;
            }
 
            Console.ReadKey();
        }
0
2636 / 1564 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
04.01.2020, 22:32 11
Количество чисел в столбце - это
C#
1
 int a = (end-start) / quantityPerLine;
Вычислите это значение единожды и подставляйте вместо тройки.
1
1 / 1 / 0
Регистрация: 09.12.2019
Сообщений: 85
05.01.2020, 07:49  [ТС] 12
Цитата Сообщение от samana Посмотреть сообщение
Количество чисел в столбце - это
спасибо за ответ

всё равно получается что PadLeft зависет от количества цифр в строке

я пытался сделать без применения переменной quantityPerLine чтобы количество пробелов не зависело от количества чисел в строке

но получается что переменная которая отвечает за сдвиг, допустим 3 корректно работает с числами до 1000 (тоже самое с 2, 4 только порядок чисел разный)
0
2636 / 1564 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
05.01.2020, 08:56 13
Я уже не уверен, что понимаю вашу задачу. Можете примерно напечатать то, как должна выглядеть таблица с числами до 1000 и после 1000?
1
1 / 1 / 0
Регистрация: 09.12.2019
Сообщений: 85
05.01.2020, 10:12  [ТС] 14
Есть код который делает следующее
Выводить числа ровно, чтобы они были друг под другом. нужно обязательно использовать функцию строки PadLeft и возможность задать начальное и конечное число, и по сколько чисел в строке выводить

вот код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
            Console.WriteLine("Программа построчно распечатывает вводимое количество чисел в строке в задаваемом интервале");
 
            Console.Write("Введите начало диапазона = ");
            int start = Convert.ToInt32(Console.ReadLine());
 
            Console.Write("Введите конец диапазона = ");
            int end = Convert.ToInt32(Console.ReadLine());
 
            Console.Write("Введите количество чисел в строке = ");
            int quantityPerLine = Convert.ToInt32(Console.ReadLine());
 
            int i = start;
            int count = 0;
           
            while (i <= end)
            {
                Console.Write(" " + i.ToString().PadLeft(quantityPerLine, ' '));
                count++;
 
                if (count == quantityPerLine)
                {
                    Console.WriteLine();
                    count = 0;
                }
 
                i++;
            }
 
            Console.ReadKey();
преподаватель говорит следующее дословно почти

i.ToString().PadLeft(quantityPerLine, ' ') - здесь значение переменной quantityPerLine не подходит по смыслу, сюда нужно подставлять количество символов/цифр в столбце, а не количество чисел в ряду
Логически количество пробелов не должно зависеть от количества чисел в строке


перепробовал кучу вариантов, получается что всё равно есть зависимость между количество пробелов не должно зависеть от количества чисел в строке?

Цитата Сообщение от samana Посмотреть сообщение
Можете примерно напечатать то, как должна выглядеть таблица с числами до 1000 и после 1000?
числа должны быть одно под другой в столбцах
0
2636 / 1564 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
05.01.2020, 11:07 15
Хм.. если я правильно понял, то результат должен выглядеть примерно так?
Код
1   2   3   4   5    6
6   7   8   9   10   11
12  13  14  15  99   100
101 102 103 999 1000 1001
Здесь не обращайте внимание на перескоки значений, просто показаны переходы от больших и малых чисел.
Это преподаватель имеет ввиду?
1
1 / 1 / 0
Регистрация: 09.12.2019
Сообщений: 85
05.01.2020, 11:24  [ТС] 16
Цитата Сообщение от samana Посмотреть сообщение
Хм.. если я правильно понял, то результат должен выглядеть примерно так?
как я понял принцип работы функции PadLeft позволяет «добить» строку заданным символом до нужной длины

Пример:
int x = 3;
Console .WriteLine (x.ToString().PadLeft (5, ' '));
// _ _ _ _ 3

Аналогично есть PadRight , которая добивает строку символами справа

как я понял должно быть, слева добитые пробелы с цифры выравненные по правому краю
0
Модератор
Эксперт .NET
15470 / 10714 / 2788
Регистрация: 21.04.2018
Сообщений: 31,544
Записей в блоге: 2
05.01.2020, 11:40 17
Цитата Сообщение от samana Посмотреть сообщение
результат должен выглядеть примерно так?
Нет. Так
Код
    1    2    3    4    5    6
    6    7    8    9   10   11
   12   13   14   15   99  100
  101  102  103  999 1000 1001
То есть для чисел должно быть выравнивание по ПРАВОЙ стороне.

Цитата Сообщение от AlexEng Посмотреть сообщение
PadLeft позволяет «добить» строку заданным символом до нужной длины
PadLeft дополняет строку слева, PadRight - справа.
Соответственно, выравнивание PadLeft - по правой, PadRight - по левой стороне.
1
1 / 1 / 0
Регистрация: 09.12.2019
Сообщений: 85
05.01.2020, 11:44  [ТС] 18
Цитата Сообщение от Элд Хасп Посмотреть сообщение
PadLeft дополняет строку слева, PadRight - справа.
Соответственно, выравнивание PadLeft - по правой, PadRight - по левой стороне.
да так и есть нужно только с PadLeft сделать без PadRight, но как это сделать, у меня при переходе от двухзначных чисел к трехзначным съезжают цифры(((
0
Модератор
Эксперт .NET
15470 / 10714 / 2788
Регистрация: 21.04.2018
Сообщений: 31,544
Записей в блоге: 2
05.01.2020, 12:15 19
Цитата Сообщение от AlexEng Посмотреть сообщение
у меня при переходе от двухзначных чисел к трехзначным съезжают цифры
AlexEng, а разве примеры из поста #10 не решают это?
1
1 / 1 / 0
Регистрация: 09.12.2019
Сообщений: 85
05.01.2020, 12:43  [ТС] 20
Цитата Сообщение от Элд Хасп Посмотреть сообщение
AlexEng, а разве примеры из поста #10 не решают это?
да код работает но примерно догадываюсь, что скажи преподаватель есть конструкции которые нельзя применять например переменная start участвует в цикле, надо делать чтобы водимые переменные не участвовали в циклах
0
05.01.2020, 12:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2020, 12:43
Помогаю со студенческими работами здесь

Ввести строки и через n символов первой строки вставить вторую строку, и так до конца строки
Помогите исправить баг задача состоит в следующем :ввести строку и простроку тоесть две строки и...

Нахождение основных значений оформить через функцию, а вывод на печать – через процедуру
Код программы: const n=6; var a:array of byte; i,j,k,x:byte; begin for i:=1 to n do ...

Нахождение основных значений оформить через функцию, а вывод на печать – через процедуру
Оформить с использованием функций и процедур. Нахождение основных значений оформить через...

Нахождение основных значений оформить через функцию, а вывод на печать – через процедуру
Дана квадратная вещественная матрица размерности n. Построить матрицу вектор (одномерный массив)...

Нахождение основных значений оформить через функцию, а вывод на печать – через процедуру
Оформить с использованием функций и процедур. Нахождение основных значений оформить через функцию,...

Формирование массива через процедуру и нахождение строки с максимальной суммой через функцию
Помогите пожалуйста. Нужно сформировать массив из элементов строки матрицы сумма котрой наибольшая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru