Вертикальная гистограмма без использования массива и функций - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! В задаче "Нарисовать при помощи символа «звездочка» горизонтальную гистограмму из 20 столбцов, высоты которых определяются при помощи датчика случайных чисел (задать диапазон чисел так, чтобы изображение гистограммы уместилось на экране монитора)." Получается реализовать

горизонтальную

, а не

вертикальную

гистограмму. В результате раздумий получилось нарисовать символы * в местах вершин столбиков. Каким образом изменить программу, чтобы столбики печатались целиком, а не только их верхние точки?
#define _CRT_SECURE_NO_WARNINGS //чтоб на scanf не ругался и не предлагал менять его на scanfs
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    /*Нарисовать при помощи символа «звездочка» горизонтальную гистограмму из 20 столбцов,
    высоты которых определяются при помощи датчика случайных чисел 
    (задать диапазон чисел так, чтобы изображение гистограммы уместилось на экране монитора).
    */
    int x;
    //system("chcp 1251 > nul"); //коментить - иначе нет псевдографики
    srand((unsigned)time(NULL));    //////////// генерация РАЗНЫХ значений
    
    for (int i = 1; i <= 20; i++)
    {
        x = rand() % 10 + 1;//
        //printf("%d ", x);
        for (int j = 1; j <= x; j++)
        {
            printf("*");
        }
        printf("\n");
    }
 
    printf("\n");
    system("pause");
    return 0;
}//конец main
Заранее благодарен за помощь

Решение задачи: «Вертикальная гистограмма без использования массива и функций»

textual
Листинг программы
#include <ncurses.h>
#include <stdlib.h>
#include <time.h>
 
#define N (20)
 
int main(void) {
    int i, j, n, x, y;
 
    initscr();
 
    srand(time(NULL));
 
    x = y = 0;
    for ( i = 0; i < N; ++i ) {
        move(y, x);
        n = rand() % N + 1;
        printw("%3d", n);
        y++;
        move(y, x);
        printw("---");
        y++;
        move(y, x);
        for ( j = 0; j < n; ++j ) {
            printw(" * ");
            y++;
            move(y, x);
        }
 
        x += 3;
        y = 0;
    }
 
    refresh();
    getch();
 
    endwin();
    return 0;
}

Объяснение кода листинга программы

Вертикальная гистограмма без использования массива и функций.

  1. Объявлены переменные i, j, n, x, y, которые будут использоваться в программе.
  2. Программа подключает необходимые библиотеки: для работы с терминалом, для работы с функцией rand(), для инициализации генератора случайных чисел.
  3. Задается значение N (20), которое будет использоваться в программе.
  4. В цикле for происходит отрисовка гистограммы.
  5. Выполняется перемещение курсора в начало следующей строки.
  6. Выполняется генерация случайного числа от 1 до N с помощью функции rand().
  7. С помощью функции printw() выводится значение случайного числа в формате %3d.
  8. Перемещается курсор на следующую строку.
  9. Выводится дефис - с помощью функции printw().
  10. Перемещается курсор на следующую строку.
  11. В цикле for выводится количество * от 1 до n, которое генерировалось на предыдущем шаге.
  12. Перемещается курсор на следующую строку.
  13. Увеличивается значение x на 3, чтобы перейти к следующему столбцу гистограммы.
  14. Перемещается курсор на первую строку следующего столбца.
  15. Цикл for повторяется для всех столбцов гистограммы.
  16. В конце программы вызывается функция refresh() для обновления экрана и функция getch() для получения пользовательского ввода.
  17. Завершается работа с терминалом с помощью функции endwin().
  18. Программа возвращает 0, что означает успешное завершение работы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы