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

Написать программу на основе другой - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как в одномерном массиве проводится сравнение http://www.cyberforum.ru/cpp-beginners/thread301350.html
Подскажите, как доделать программу: Задание: Дан одномерный массив длиной N. Массив заполняется датчиком случайных чисел (лучше использовать любое распределение, кроме нормального). Требуется: 1) отсортировать массив со случайными числами; 2) в отсортированный массив, вставить случайное число, чтобы он оставался отсортированным; 3) на экране после выполнения программы должно...
C++ Перегрузка оператора присваивания При перегрузке оператора присвоения выдает ошибки cpp(58) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> f:\c++\c++\vc\include\string.h(74): см. объявление 'strcpy cpp(63) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider... http://www.cyberforum.ru/cpp-beginners/thread301348.html
Книги C++
Посоветуйте пожалуйста книги для Microsoft Visual C++ . Буду очень Благодарен!!!!
Строки C++
Нужна помощь в написании программ на языке с . Строчные елементы
C++ Поиск подстроки http://www.cyberforum.ru/cpp-beginners/thread301305.html
Почему при поиске вхождения подстроки в строку если я ввожу несколько слов, то компилятор разделяет строку на слова и ищет вхождение в них? Мне надо составить программу, с которой можно было бы "разговаривать" #include <cstdlib> #include <iostream> #include <conio.h> #include <stdlib.h> using namespace std;
C++ Не исполняется exe в openwatcom Только недавно начал изучать C++. установил openwatcom, создал проект, исходный файл cpp куда сбросил вот эту простую программку из С++ туториала: // my second program in C++ #include <iostream> using namespace std; int main () { cout << "Hello World! "; cout << "I'm a C++ program"; подробнее

Показать сообщение отдельно
Sventox
0 / 0 / 0
Регистрация: 13.04.2011
Сообщений: 4

Написать программу на основе другой - C++

21.05.2011, 21:21. Просмотров 273. Ответов 0
Метки (Все метки)

Здрасте, имеется программа которое моделирует работу многопроцессорной сисетмы (Screenshot-172.jpg), нужно переделать её для другой архитектуры (Screenshot-173.jpg).
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#include <iostream>
#include <queue>
 
#include <time.h>
#include <stdlib.h>
 
#define NUMBER_OF_INSTRUCTIONS 100
#define COEFFICIENT_LATENCY 2
 
using namespace std;
 
class CpuState {
public:
  //класс описывающий один конкретно взятый процессор
    enum STATE {
        READY,
        WAITING_RESPONCE,
        WAITING_MEMORY,
        COMPLITED
    } state;
  //перечисление состояний процессора
    
    CpuState() {
        state = READY;
        waitingBeats = 0;
        passedBeats = 0;
    }
  //функция-конструктор задающая начальные значения переменных описывающих состояние процессора
  
    void addTask(float tsk) { task.push(tsk); }
  //ф-ия "добавить задание"
    float currentTask() { return task.front(); }
  //ф-ия "узнать задание"
    float lastTask() { return task.back(); }
  //ф-ия "узнать последнее добавленное задание (использовалась для вывода и отладки, можно стереть)"
    void complTask() { task.pop(); }
  //ф-ия "завершить задание (первое задание в очереди выкидывается из неё)"
    bool hasTask() { return (task.empty()) ? false : true;}
  //ф-ия "проверка наличия заданий"
 
    void setBeats(int beats) { waitingBeats = beats; }
  //ф-ия "установить колличество тактов ожидания"
    void decBeats() { if(waitingBeats > 0) waitingBeats--; }
  //ф-ия "уменьшить колличество тактов ожидания на 1"
    bool isNotWaiting() { return (waitingBeats == 0) ? true : false; }
  //ф-ия "проверка статуса процессора на то не простаивает ли он"   
    void incPassedBeats(int pBeats) { passedBeats += pBeats; }
  //ф-ия "подсчёта колличества рабочих тактов"
    unsigned int getPassedBeats() { return passedBeats; }
  //ф-ия "получение числа рабочих тактов"
private:
    unsigned int waitingBeats;
    //колличество рабочих тактов
    queue <float> task;
    //очередь заданий процессора
    unsigned long passedBeats;
    //общее колличество тактов
};
 
 
int main() {
    for(int j = 0; j < 10; j++) {
        cout << "замер № " << j + 1 << endl;
 
    CpuState cpu1, cpu2, cpu3;
    //создаём три экземпляра класса "состояние процессора"
 
    cout << "задачи процессоров:" << endl;
    srand(time(NULL));
    for(int i = 0; i < NUMBER_OF_INSTRUCTIONS; i++) {
        cpu1.addTask((rand() % 30000) + 15000);
        cpu2.addTask((rand() % 30000) + 15000);
        cpu3.addTask((rand() % 30000) + 15000);
        cout << "cpu1 = " << cpu1.lastTask() << "   " 
              << "cpu2 = " << cpu2.lastTask() << "   "
              << "cpu3 = " << cpu3.lastTask() << endl;
    }
    cout << "------------------------------------" << endl;
    //случайным образом генерируем 100 задачь для каждого процессора и выводи их на экран
 
    queue<CpuState *> queueForService;
    queueForService.push(&cpu1);
    queueForService.push(&cpu2);
    queueForService.push(&cpu3);
    //очередь процессоров на обслуживание шиной
    
    unsigned long beats = 0, memoryUsed = 0, busOccupied = 0;
    for(;  cpu1.state != CpuState::COMPLITED ||
             cpu2.state != CpuState::COMPLITED ||
             cpu3.state != CpuState::COMPLITED; beats++) {
              //цикл работающий до тех пор пока хотя бы у одного процессора будут задания
              //после каждой итерации увеличивает общее колличество прошедших тактов на 1
        if(busOccupied > 0)
            busOccupied--;
              //проверка условия занятости шины
              //в случае если она занята, колличество тактов которые она ещё будет занята уменьшается на 1
        //  cout << "итерация № " << beats + 1 << endl;
        //  cout << "шина будет занята ещё " << busOccupied << " тактов." << endl;
        //  cout << "слотов памяти использованно " << memoryUsed << endl;
 
        cpu1.decBeats(), cpu2.decBeats(), cpu3.decBeats();
        //уменьшается (если необходимо(проверяется внутри самой функции)) колличество тактов
        //в течении которых процессор ещё будет занят
 
        //  cout << "активных тактов процессора cpu1 прошло: " << cpu1.getPassedBeats()
        //        << ". активных тактов процессора cpu2 прошло: " << cpu2.getPassedBeats()
        //        << ". активных тактов процессора cpu3 прошло: " << cpu3.getPassedBeats() << '.' << endl;
 
        if(busOccupied == 0) {
            //      cout << "------------------------------------" << endl;
            //      cout << "Условие \"шина свободна\" сработало" << endl;
            //      cout << "------------------------------------" << endl;
            CpuState * tmpCpuState = queueForService.front();
 
            if(tmpCpuState->state == CpuState::READY && memoryUsed < 2) {
                tmpCpuState->state = CpuState::WAITING_RESPONCE;
                tmpCpuState->setBeats(COEFFICIENT_LATENCY);
                memoryUsed++;
                busOccupied++;
                tmpCpuState->incPassedBeats(1);
                //          cout << "Условие \"процессор готов и память свободна\" сработало" << endl;
                //          cout << "------------------------------------" << endl;
            }
 
            if(tmpCpuState->state == CpuState::WAITING_RESPONCE && tmpCpuState->isNotWaiting()) {
                //          cout << "Условие \"время ожидания памяти процессором истекло\" сработало" << endl;
                //          cout << "------------------------------------" << endl;
                if(tmpCpuState->hasTask()) {
                    //              cout << "Условие \"у процессора ещё есть задания\" сработало" << endl;
                    //              cout << "------------------------------------" << endl;
                    tmpCpuState->state = CpuState::READY;
                }
                else {
                    //              cout << "Условие \"у процессора больше нет заданий\" сработало" << endl;
                    //              cout << "------------------------------------" << endl;
                    tmpCpuState->state = CpuState::COMPLITED;
                }
 
                tmpCpuState->setBeats(10 * tmpCpuState->currentTask());
                busOccupied += 10 * tmpCpuState->currentTask();
                tmpCpuState->incPassedBeats(10 * tmpCpuState->currentTask());
                tmpCpuState->complTask();
                memoryUsed--;
            }
 
            queueForService.pop();
            queueForService.push(tmpCpuState);
        }
 
        //  cout << "+--------------------------------------------------"
        //        << "--------------------------------------------------+" << endl;
    }
 
    cout << "В итоге: " << endl << "Шина была занята " << beats << " тактов."
          << " Из них на ожидание ушло " 
          << beats - (cpu1.getPassedBeats() + cpu2.getPassedBeats() + cpu3.getPassedBeats()) << " тактов" << endl
          << "В процентном отношение полезное время шины составляет: "
          << ((cpu1.getPassedBeats() + cpu2.getPassedBeats() + cpu3.getPassedBeats()) / (float)beats) * 100.0
          << "%. " << endl
 
          << "Процессор 1 отработал " << cpu1.getPassedBeats() << " тактов" 
          << "что в процентном отношении составляет "
          << (((float)cpu1.getPassedBeats() / (float)beats) * 100.0) << "% времени полезной работы" << endl
 
          << "Процессор 2 отработал " << cpu2.getPassedBeats() << " тактов" 
          << "что в процентном отношении составляет "
          << (((float)cpu2.getPassedBeats() / (float)beats) * 100.0) << "% времени полезной работы" << endl
 
          << "Процессор 3 отработал " << cpu3.getPassedBeats() << " тактов" 
          << "что в процентном отношении составляет "
          << (((float)cpu3.getPassedBeats() / (float)beats) * 100.0) << "% времени полезной работы" << endl;
 
    cout << endl;
    }
    return 0;
}
В принципе описание должно быть понятным как работает данная программа. Может кто поможет, (если что задавай те вопросы)
Миниатюры
Написать программу на основе другой   Написать программу на основе другой  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru