Форум программистов, компьютерный форум CyberForum.ru

Одномерный массив - C++

Восстановить пароль Регистрация
 
UKOL
 Аватар для UKOL
112 / 64 / 7
Регистрация: 17.11.2009
Сообщений: 258
15.03.2010, 10:16     Одномерный массив #1
Помогите решить задачу на С++.
Используйте одномерный массив для решения следующей задачи.
Компания платит своим продавцам на комиссионной основе. Продавцы получают $200 в неделю плюс 9% от их валовой продажи за эту неделю.Например,продавец, валовая продажа которого за неделю составила $5000,получает $200 плюс 9% от $5000, или всего в сумме $650. Напишите программу на С++ (используя массив счетчиков), которая определяет, сколько продавцов получили заработную плату в каждом из следующих
диапазонов(примем допущение ,что зарплата каждого продавца округляется до целого значения):
1.$200-299
2.$300-399
3.$400-499
4.$500-599
5.$600-699
6.$700-799
7.$800-800
8.$900-999
9.$1000-и более.

Значит программу написал, но не понял как использовать счетчик диапазонов...

Вот код:

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
#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
 
int main()
{
    srand(time(NULL));
    int arraySize, raschet=200, kategor=10;
    float procent=(float)(0.09);
    cout << "Please enter kol-vo prodavcov: ";
    cin >> arraySize;
    int prodaji[100]={0};
    int frequency[100]={0};
    int zarplata[100]={0};
 
    //Забиваем в массив значения валого дохода
    for(int i=0; i<arraySize; i++)
    {
        prodaji[i]=(1+rand()%5000);
    }
    //Вывод на экран валого дохода
    for(int i=0; i<arraySize; i++)
        cout << "Prodaja " <<i+1<<" rabochego: " << prodaji[i] << endl;
    cout << endl;
    //Расчет зарполаты каждого продавца с учетом процентов и положенных 200 баксов
    for(int i=0;i<arraySize; i++)
        zarplata[i]=((prodaji[i]*procent)+200);
    //Вывод на экран
    for(int i=0;i<arraySize;i++)
        cout << "Zarplata " << i+1 << " rabocego:" << zarplata[i] << endl;
    cout << endl;
    //То самое место где непонятно что дальше делать и как определить диапазон и вбить в него счетчик
    /*for(int i=0;i<arraySize;i++)
    {
        ++frequency[zarplata[i]];
    }
 
    for(int i=1;i<kategor;i++)
        cout << i << '.' << setw(10) << frequency[i] << endl;*/
 
    return 0;
}
Добавлено через 16 часов 12 минут
Народ! Жду ваших отзывов, и расчитываю на вас.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2010, 10:16     Одномерный массив
Посмотрите здесь:

Дан двумерный массив размерностью 4*5. Сформировать одномерный массив C++
Массив: найти номера столбцов с положительными элементами и записать их в одномерный массив C++
Матрица и одномерный массив (Составить одномерный массив, содержащий количество буквенных символов в каждом из ее столбцов, подсчет символов) C++
Создать одномерный массив, заполнить его случайными значениями, отсортировать массив по убыванию C++
Сформировать одномерный массив, удалить первый элемент с заданным значением, сдвинуть массив циклически C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yurii_74
paladin
 Аватар для Yurii_74
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
15.03.2010, 10:56     Одномерный массив #2
Здесь нужен массив из 9 элементов (пусть будет conters). В зависимости от того, куда попала зарплата продавцов увеличиваем значение одного из элементов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int counters[9];
for (i=0;i<9;i++) counters = 0;
 
for (i=0;i<arraySize;i++)
if (zarplata[i]>999)
{
  counters[8]++;
}
else
{
  counters[((zarplata[i]-200)/100)]++;
};
UKOL
 Аватар для UKOL
112 / 64 / 7
Регистрация: 17.11.2009
Сообщений: 258
15.03.2010, 11:20  [ТС]     Одномерный массив #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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
 
int main()
{
    srand(time(NULL));
    int arraySize, raschet=200, kategor=10;
    float procent=(float)(0.09);
    cout << "Please enter kol-vo prodavcov: ";
    cin >> arraySize;
    int prodaji[100]={0};
    int frequency[100]={0};
    int zarplata[100]={0};
 
    //Забиваем в массив значения валого дохода
    for(int i=0; i<arraySize; i++)
    {
        prodaji[i]=(1+rand()%50000);
    }
    //Вывод на экран валого дохода
    for(int i=0; i<arraySize; i++)
        cout << "Prodaja " << i+1 <<" rabochego: " << prodaji[i] << endl;
    cout << endl;
    //Расчет зарполаты каждого продавца с учетом процентов и положенных 200 баксов
    for(int i=0;i<arraySize; i++)
        zarplata[i]=((prodaji[i]*procent)+200);
    //Вывод на экран
    for(int i=0;i<arraySize;i++)
        cout << "Zarplata " << i+1 << " rabocego:" << zarplata[i] << endl;
    cout << endl;
    //счетчик количества зарплаты по диапазону
    for (int i=0;i<arraySize;i++)
    {
        if (zarplata[i]>999)
        {
            frequency[9]++;
        }
        else
        {
             frequency[((zarplata[i]-200)/100)]++;
        }
    }
 
        for(int i=0;i<kategor;i++)
                cout << i << '.' << setw(10) << frequency[i] << endl;
    return 0;
}
System16v
 Аватар для System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
01.04.2015, 18:42     Одномерный массив #4
А почему з/п считается рандомно? .Мне кажется по заданию просилось чтоб ты ее сам вбивал,да и логичней так, зарплата ведь не может быть рандомной . Я вот написал код,где кол-во сотрудников не ограничено(образно).Т.е. создал просто большой массив,и количество сотрудников никогда не превысит размер массива(образно).Хотел сначала вообще чтоб размер определялся только после введения зарплат,но так не получилось,пришлось просто большой размер массива делать.Ну сделал чтоб зарплаты вводишь сам,в цикле с выходом "-1",ну и вывод на экран. В общем как понял задачу,так и реализовал (надеюсь правильно в плане реализации),выводит вроде всё правильно .Есть одна не понятка со счетом процентов(указал в комментариях кода),так не допер,почему он считает сумму на 1 меньше,чем нужно,пришлось прибавлять единицу,чтоб считал нормально.Кто знает почему,объясните. Ну и так, может кому код пригодится
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
59
60
61
62
63
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <cstdlib>
#include <iomanip>
 
using namespace std;
 
 
int main()
{
   int sum=0,pr=0; // pr - счетчик подсчета количества продавцов
   const int size=100,size1=12;
   // 1ый массив для суммы продаж (изначально планровал любой,но т.к.
   // не получилось,пришлось ставить заведомо большое число которое будет всегда
   // больше,чем кол-во сотрудников. 2й массив для вывода кол-ва сотрудников
   int array[size]={0};
   int array1[size1]={0};
   while(sum!=-1)
     {
      cout << "Vvedite summy prodag prodavcov(-1 dlya vihoda): " ;
      cin >> sum;
      array[pr]=201+sum*0.09;  // не знаю почему,но пришлось добавить к 200
      // единицу,иначе считает на единицу меньше,так и не понял почему
      pr++;
     }
   cout << endl << endl;
   cout << "  Zarplata" << "  Kol-vo ch" << endl;
   cout << "--------------------------------" <<endl;
   for(int a=0;a<pr-1;a++)
   // pr-1 стоит потому,что если использовать просто pr,то в массив
   // прописывается лишнее значение "-1",использумое для выхода из цикла while
   {  // считаем какой элемент во 2ом массиве нужно увеличить
      if(array[a]/100<10)
          array1[array[a]/100]++;
      // если получаем индекс до 10ти,то увеличиваем тот элемент,
      // который получился,если больше 10ти,то увеличиваем только 10ый элемент
      // нужно это для того,чтоб если при расчете получается индекс более 10ти,
      // чтоб не вылезло за предел массива
      else if(array[a]/100>10)
          array1[10]++;
   }
   for(int b=0;b<size1-3;b++) // вывод на экран количество сотрудников
   // size-3 - потому что не используются первые 2 значения 0-99,100-199
      {
         if(b==0)
            cout << " 200$-299$: ";
         else if(b==8)
            cout << "Over 1000$: ";
         else
            cout << " " << (b*100)+200 << "$" << "-" << (b*100)+299 << "$: ";
      // array1[b+2] - потому,у нас не учитываются зарплаты 0-99$,100-199,и
      // нужный нам 1ый элемент находится на позиции array[2],а не array[0]
      // без использования +2,у нас вывод элементов был бы неправильным,
      // смещенным на 2 позиции влево. Отсюда и размерность 2го массива была
      // увеличена на 2,т.е. 12,а не 10
         cout << "\t" << array1[b+2];
         cout << endl;
      }
   cout << endl;
   system("pause");
   return 0;
}
Добавлено через 1 час 6 минут
Кстати заметил косяк...В 40вой строке надо условие изменить на
C++
1
 else if(array[a]/100>=10)
,а то не все значения входят.Ну и сообразил переделал 2й массив с размерностью 9,а не 12ть. В общем,вот доделанная
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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <cstdlib>
#include <iomanip>
 
using namespace std;
 
 
int main()
{
   int sum=0,pr=0;
   const int size=100,size1=9;
   int array[size]={0};
   int array1[size1]={0};
   while(sum!=-1)
     {
      cout << "Vvedite summy prodag prodavcov(-1 dlya vihoda): " ;
      cin >> sum;
      array[pr]=201+sum*0.09;
      pr++;
     }
   cout << "  Zarplata" << "  Kol-vo ch" << endl;
   cout << "--------------------------------" <<endl;
   for(int a=0;a<pr-1;a++)
   {
      if(array[a]/100<10)
          array1[(array[a]/100)-2]++;
      else if(array[a]/100>=10)
          array1[8]++;
   }
   for(int b=0;b<size1;b++)
      {
         if(b==0)
            cout << " 200$-299$: ";
         else if(b==8)
            cout << "Over 1000$: ";
         else
            cout << " " << (b*100)+200 << "$" << "-" << (b*100)+299 << "$: ";
         cout << "\t" << array1[b];
         cout << endl;
      }
   cout << endl;
   system("pause");
   return 0;
}
Yandex
Объявления
01.04.2015, 18:42     Одномерный массив
Ответ Создать тему
Опции темы

Текущее время: 12:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru