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

  • Автор темы Hqw33
  • Дата начала
Статус
Закрыто для дальнейших ответов.
H

Hqw33

Гость
#1
Пишу в 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();
}
 
Статус
Закрыто для дальнейших ответов.