C++ Работа С Динамической Памятью Через Указатели.

Тема в разделе "C/C++/C#", создана пользователем Hqw33, 25 мар 2012.

Статус темы:
Закрыта.
  1. Hqw33

    Hqw33 Гость

    Пишу в Microsoft Visual Studio ->Win32 Console application ->C++.
    Есть такая задача:
    Создать массив из N целых чисел, N вводит пользователь. Заполнить массив случайным образом в диапазоне от 1 до 12. Каждое число это оценка по 12-ти бальной системе. Перевести эти оценки в 5-ти бальную систему, где двойка от 1 до 3 включительно, тройка от 4 до 6, четверка от 7 до 9, пятерка от 10 до 12. Пользуясь указателем на массив целых чисел, посчитать процент двоек, троек, четверок и пятерок. Результат изобразить графически с помощью диаграммы, например:
    2: **********
    3: ********************
    4: ****************************************
    5: ******************************
    У меня есть несколько вопросов по решению, вопросы выделены "!///!"
    Вот решение:
    Код (C++):
    #include<windows.h>
    #include<time.h>
    #include<iostream>

    #define BAR_MAX 10   //число символов для отображения 100% на экране

    using namespace std;

    int main()
    {
    int i;               //переменная цикла
    int N;               //количество элементов в массиве
    int *Marks;          //массив оценок
    int Twos=0;          //количество двоек
    int Threes=0;  //количество троек
    int Fours=0;    //количество четверок
    int Fives=0;    //количество пятерок
    int NumStars;  //количество * для отображения % на диаграмме
    srand(time(NULL));   
    cout<<"Enter number of elements:"<<endl;
    cin>>N;
    Marks=new int[N];    
    cout<<"Marks in the 12th system:"<<endl;
    //заполняем массив отметок числами от 1 до 12
    for(i=0;i<N;i++)
    {
    Marks[i]=rand()%12+1;
    cout<<Marks[i]<<" ";
    }
    cout<<endl<<"Marks in the 5th system:"<<endl;
    //переводим в систему 1-5
    for(i=0;i<N;i++)
    {
    if((Marks[i]>=1)&&(Marks[i]<=3)) Marks[i]=2;
    else if((Marks[i]>=4)&&(Marks[i]<=6)) Marks[i]=3;
    else if((Marks[i]>=7)&&(Marks[i]<=9)) Marks[i]=4;
    else Marks[i]=5;
    cout<<Marks[i]<<" ";
    }
    cout<<endl;  
    //собираем статистику
    i=0;
    while(i<N)
    {
    switch(*Marks) !///! Что происходит внутри while и switch, каким образом собирается статистика? Что на каком шаге происходит? И правильно ли это?
    {
    case 2: Twos++;break;
    case 3: Threes++;break;
    case 4: Fours++;break;
    case 5: Fives++;break;
    }
    Marks++;
    i++;
    }
    //рисуем диаграмму  !///! Диаграм рисуется каким то очень странным "способом", как изменить диаграмму таким образом что бы 1% был одной звездочкой? (всего 100%)
    cout<<"2:";
    NumStars=Twos*BAR_MAX/N;
    for(i=0;i<NumStars;i++) cout<<"*";
    cout<<endl;
    cout<<"3:";
    NumStars=Threes*BAR_MAX/N;
    for(i=0;i<NumStars;i++) cout<<"*";
    cout<<endl;
    cout<<"4:";
    NumStars=Fours*BAR_MAX/N;
    for(i=0;i<NumStars;i++) cout<<"*";
    cout<<endl;
    cout<<"5:";
    NumStars=Fives*BAR_MAX/N;
    for(i=0;i<NumStars;i++) cout<<"*";
    cout<<endl;  
    getchar();
    }
     
Загрузка...
Похожие Темы - C++ Работа Динамической
  1. acs-nexus
    Ответов:
    0
    Просмотров:
    87
  2. acs-nexus
    Ответов:
    0
    Просмотров:
    163
  3. acs-nexus
    Ответов:
    0
    Просмотров:
    235
  4. acs-nexus
    Ответов:
    0
    Просмотров:
    380
  5. sgfsdg
    Ответов:
    1
    Просмотров:
    422
Статус темы:
Закрыта.

Поделиться этой страницей