0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 25
1

Вывести вертикальную гистограмму длин слов введенного текста

27.04.2018, 12:36. Показов 3260. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, дали задачу "вывести вертикальную гистограмму длин слов введенного текста". не особо понимаю как это реализовать . Нужен цикл, который на каждой итерации у каждого слова проверяет наличие ненулевого элемента и делает штрих в строке если он есть? Но как реализовать, чтобы за одну итерацию цикл мог сразу все слова из текста проверить ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2018, 12:36
Ответы с готовыми решениями:

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

Вывести вертикальную гистограмму длин слов введенного текста
Вывести вертикальную гистограмму длин слов введенного текста

Для заданного текста построить гистограмму распределения длин слов.
Для заданного текста построить гистограмму распределения длин слов. Помогите пожалуйста.В С++

Программа, печатающая гистограмму длин вводимых слов
Вообщем ,думаю всем известно это упражнение из книги кернигана и ритчи. Я написал программу,но...

15
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 578
27.04.2018, 15:45 2
Johannex,

1. Преобразуем текст в массив слов
C#
1
String.Split(new string[] { " " });
2. Создаём массив значений для гистограммы, длиной равной разнице максимальной и минимальной длины слова
3. В цикле от минимальной длины
C#
1
String[].Min(x => x.Length)
до максимальной длины
C#
1
String[].Max(x => x.Length)
ищем количество слов соответствующей длины
C#
1
String[].Where(x => x.Length == переменная цикла, обозначающая искомую длину слова).Count()
Если количество ненулевое, сохраняем в массив значений для гистограммы поl индексом, равным (переменная цикла, обозначающая искомую длину слова минус минимальная длина слова)
4. Рисуем гистограмму
0
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 25
27.04.2018, 16:05  [ТС] 3
в 1 коде жалуется, невозможно преобразовать string[] в char. Может я неправильно делаю ?
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 578
27.04.2018, 16:33 4
Johannex,

C#
1
.Split(new char[] { ' ' })
0
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 25
27.04.2018, 16:36  [ТС] 5
Вот создал string s = Console.ReadLine();
Теперь s.Split(new string[] { " " });
Так работает. Теперь запутался с массивом немного.
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 578
27.04.2018, 16:42 6
Johannex, ок, хорошо.

метод Split возвращает массив строк, разделённых разделителями (мы выбрали в качестве разделителя пробел).
Объявляем переменную string[] words и присваиваем ему массив, возвращаемый методом Split.
0
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 25
27.04.2018, 16:49  [ТС] 7
string[] words = s.Split(new char[] { ' ' });
Так правильно, или нет?
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 578
27.04.2018, 17:02 8
Johannex,
в качестве разделителя могут использоваться как символы
C#
1
new char[] { ' ' }
так и строки
C#
1
new string[] { "строка-разделитель" }
посмотрите перегрузки метода Split
0
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 25
27.04.2018, 17:12  [ТС] 9
Всего 5 перегрузок сказано, но для задачи нужна же 1 ?
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 578
27.04.2018, 17:19 10
Johannex,
да, вот так для этой задачи годится
C#
1
.Split(new char[] { ' ' })
0
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 25
27.04.2018, 17:36  [ТС] 11
Так и сделал. Присвоил это массиву, вот только как максимального значения длины слова вычесть минимальное? И для каждого слова нужно это?
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 578
28.04.2018, 10:21 12
Johannex, прежде чем начинать писать код, нужно понять как задача решается с математической точки зрения. Вы уже решили её математически?

Вот текст для примера:
В замкнутой системе тел полная энергия не изменяется при любых взаимодействиях внутри этой системы тел
Как будете решать задачу?
0
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 25
29.04.2018, 16:33  [ТС] 13
Именно, даже с математической не понимаю как решить. Гистограммы в C# никогда не видел
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 578
29.04.2018, 21:52 14
Johannex, гистограмму в консоли звёздочками нарисовать можно, это не проблема.
Для гистограммы нужен диапазон интервалов (по оси Х) и диапазон значений (по оси У).
Для данной задачи интервалами будет длина слова, а значениями количество слов определённой длины в тексте.
0
182 / 145 / 94
Регистрация: 30.07.2013
Сообщений: 578
29.04.2018, 22:37 15
Лучший ответ Сообщение было отмечено Johannex как решение

Решение

Johannex,
Вывести вертикальную гистограмму длин слов введенного текста

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class Program
    {
        static void Main(string[] args)
        {
            // текст для анализа:
            string text = "В замкнутой системе тел полная энергия не изменяется при любых взаимодействиях внутри этой системы тел";
 
            // массив слов:
            string[] words = text.Split(' ');
 
            int[] buffer = new int[255]; // буферный массив
            int longest = 0; // максимальная длина слова
            int maxCount = 0; // самая часто встречаемая длина слова
            foreach(string word in words)
            {
                if (word.Length > longest) longest = word.Length; // ищем максимальную длину слова
                buffer[word.Length - 1]++; // увеличиваем количество слов длины, соотвествующей длине текущего слова 
                if (buffer[word.Length - 1] > maxCount) maxCount = buffer[word.Length - 1]; // ищем самую часто встречаемую длину слова
            }
 
            // массив значений для гистограммы
            int[] values = new int[longest];
 
            Array.Copy(buffer, 0, values, 0, longest); // копируем значения из буфера в массив значений, отсекая всё лишнее и незначимое
 
            // печатаем справку:
            Console.WriteLine(String.Format("Текст для анализа: {0}", text));
            Console.WriteLine(String.Format("Количество слов: {0}", words.Length));
            Console.WriteLine(String.Format("Максимальная длина слова: {0}", longest));
            Console.WriteLine();
 
            // рисуем гистограмму:
            string row = "";
            for (int count = maxCount, i = values.Length - 1; count > 0; count--, i--)
            {
                row = count.ToString();
                foreach (int value in values)
                {
                    if (value - count >= 0) row += " *  ";
                    else row += "    ";
                }
                Console.WriteLine();
                Console.WriteLine(row);
                
                if (count == 1)
                {
                    row = "";
                    for (int index = 1; index <= longest; index++)
                    {
                        row += index > 9 ? " " + index + " " : "  " + index + " ";
                    }
                    Console.WriteLine(row);
                }
            }
 
 
            Console.ReadLine();
        }
1
0 / 0 / 0
Регистрация: 24.11.2017
Сообщений: 25
30.04.2018, 20:06  [ТС] 16
Спасибо большое вам за помощь, теперь все понятно стало. Код попробую доделать, чтобы длину каждого слова вывел.
0
30.04.2018, 20:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.04.2018, 20:06
Помогаю со студенческими работами здесь

Сформировать гистограмму длин слов, хранящихся в текстовом файле
помогите с этим заданием !!!..... Сформировать гистограмму длин слов, хранящихся в текстовом...

Получить гистограмму (столбчатую диаграмму) длин всех слов файла
Добрый день,помогите пожалуйста доработать программу. Нужно получить гистограмму (столбчатую...

Дан символьный файл f. Получить гистограмму длин всех слов файла f
Привет! Пожалуйста, помогите решить. Дан символьный файл f. Считая, что количество символов в...

Вывести два соседних слова, сумма длин которых меньше суммы длин любых других пар соседних слов.
Необходимо вывести два соседних слова, сумма длин которых меньше суммы длин любых других пар...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

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