Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
1

Классо-Ориентированое Программирование

23.07.2016, 23:44. Показов 1666. Ответов 28
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам

Не по теме:

«Классо-Ориентированое Программирование» — это когда используются классы, состоящие только из статических методов и свойств, а экземпляр класса никогда не создается.


Возник вопрос в организации кода. Есть 2 варианта:
Цитата Сообщение от 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
    /* ==================================================
    ** MAIN
    ** ==================================================
    */
    
     // Waiting for Start a GAME... 
    App::printMsg("WAIT");
    while(!App::gameIsRun())
    {
        Sleep(1000);
    }
    
    App app;
    App::printMsg("HOTKEYS");
    app.start();
    //delete app;
    
    
    /* ==================================================
    ** APP
    ** ==================================================
    */
    
    private:
        static LPSTR sound[3];
        static bool bGodMode, bUnAmmo;
        static bool gameOnFocus();
        
    // ... ... ...
    
    // Continue IF GAME is not active
    if(!gameOnFocus())
    {
        Sleep(1000);
        continue;
    }
    
    // Rewrite data if FREEZE FLAG enabled
    if(bGodMode)
    {
        game.setPoints(MAX_HEALTH, MAX_ARMOUR);
    }
    if(bUnAmmo)
    {
        game.updateAmmo();
    }
    
    // Keyboard handling
    if(GetAsyncKeyState(KEY_GODMODE) & 1)
    {
        bGodMode = !bGodMode;
        speech(bGodMode);
    }
    if(GetAsyncKeyState(KEY_AMMO) & 1)
    {
        bUnAmmo = !bUnAmmo;
        speech(bUnAmmo);
    }
    if(GetAsyncKeyState(KEY_MONEY) & 1)
    {
        Trainer::setMoney(MONEY_AMMOUNT);
        speech(2);
    }
Цитата Сообщение от 2
создаётся статическое поле static App* instance;
появляется возможность убрать у большинства методов ключевое static
появляется возможность убрать у всех полей ключевое слово static
Кликните здесь для просмотра всего текста
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
    /* =====================================================
    ** MAIN
    ** =====================================================
    */
    
    // Waiting for Start a GAME...
    App::printMsg("WAIT");
    while(!App::gameIsRun())
    {
        Sleep(1000);
    }
    
    App::instance = new App();
    App::instance->start();
 
    delete App::instance;
    
    /* ==================================================
    ** APP
    ** ==================================================
    */
    
    private:
        LPSTR sound[3];
        bool bGodMode, bUnAmmo;
        static App* instance;
        bool gameOnFocus();
        
    // ... ... ...
    
    // Continue IF GAME is not active
    if(!instance->gameOnFocus())
    {
        Sleep(1000);
        continue;
    }
    
    // Rewrite data if FREEZE FLAG enabled
    if(instance->bGodMode)
    {
        game.setPoints(MAX_HEALTH, MAX_ARMOUR);
    }
    if(instance->bUnAmmo)
    {
        game.updateAmmo();
    }
    
    // Keyboard handling
    if(GetAsyncKeyState(KEY_GODMODE) & 1)
    {
        instance->bGodMode = !instance->bGodMode;
        instance->speech(instance->bGodMode);
    }
    if(GetAsyncKeyState(KEY_AMMO) & 1)
    {
        instance->bUnAmmo = !instance->bUnAmmo;
        instance->speech(instance->bUnAmmo);
    }
    if(GetAsyncKeyState(KEY_MONEY) & 1)
    {
        Trainer::setMoney(MONEY_AMMOUNT);
        instance->speech(2);
    }
Какой лучше использовать?
Вложения
Тип файла: zip gameTrainer.zip (11.7 Кб, 1 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.07.2016, 23:44
Ответы с готовыми решениями:

Разобраться в примерх к книге Лафоре "Обьектно-ориентированое программирование в С++"
Всем доброго времени суток кто читает эту тему. Сегодня, изучая С++ по книге Лафоре...

Иерархия классо и БД !!!
Есть такая задача: создать иерархию классов, например "Родитель - Дети", и отобразить это на БД....

объектно-ориентированое програмирование
Напишите программу, которая должна отображать у левого края фор- мы сплошной квадрат из звездочек,...

Программирование одномерных массивов. Программирование двумерных массивов. Программирование динамических массивов VBA
1. Написать процедуру по упорядочению элементов заданного массива В в следующем порядке: сначала...

28
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.07.2016, 23:47 2
Цитата Сообщение от dailydose Посмотреть сообщение
Какой лучше использовать?
не использовать «Классо-Ориентированое Программирование»
1
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
23.07.2016, 23:48  [ТС] 3
hoggy, оставить всё в процедурном стиле?
0
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.07.2016, 23:53 4
Цитата Сообщение от dailydose Посмотреть сообщение
оставить всё в процедурном стиле?
ваше «Классо-Ориентированое Программирование» и есть процедурный стиль.

либо пишите в нормальном процедурном стиле.
либо пишите в нормальном ооп стиле.
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
24.07.2016, 00:02  [ТС] 5
Цитата Сообщение от hoggy Посмотреть сообщение
либо пишите в нормальном процедурном стиле.
Изначально так и было сделано, но захотелось создать класс, который объединил бы в себе некие поля и методы

Цитата Сообщение от hoggy Посмотреть сообщение
либо пишите в нормальном ооп стиле.
Что я собственно и пытаюсь.

+ В модуле APP создаётся поток, а как известно поток можно создать на основе обычной функции(процедуры) и/или на основе статического(!) метода класса
+ Поток работает с полями/методами этого модуля, и чтобы он мог это делать приходится большую часть методов и полей делать статическими
0
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.07.2016, 00:08 6
Лучший ответ Сообщение было отмечено dailydose как решение

Решение

Цитата Сообщение от dailydose Посмотреть сообщение
Изначально так и было сделано, но захотелось создать класс, который объединил бы в себе некие поля и методы
используйте namespace

Цитата Сообщение от dailydose Посмотреть сообщение
как известно поток можно создать на основе обычной функции(процедуры) и/или на основе статического(!) метода класса
используйте std::thread.

Цитата Сообщение от dailydose Посмотреть сообщение
Поток работает с полями/методами этого модуля, и чтобы он мог это делать приходится большую часть методов и полей делать статическими
даже если вы используете обычное winapi,
у вас есть возможность крутить поток внутри
нестатической функции-члена.
1
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
24.07.2016, 00:10  [ТС] 7
Цитата Сообщение от hoggy Посмотреть сообщение
даже если вы используете обычное winapi,
у вас есть возможность крутить поток внутри
нестатической функции-члена.
std::thread?
0
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.07.2016, 00:16 8
Цитата Сообщение от dailydose Посмотреть сообщение
std::thread?

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
#include <iostream>  
#include <thread>    
#include <chrono>
 
struct sample
{
    sample(int v):m_v(v){}
    
    void foo() const
    {
        for(size_t n=0;n<5;++n)
            std::cout << m_v * n << std::endl,
            std::this_thread::sleep_for(std::chrono::seconds(1));
            
        std::cout << std::endl;
    }
    
    int m_v;
};
 
 
 
int main() 
{
    sample obj(10);
    
    std::thread launch([&obj]{ obj.foo(); });
 
    launch.join();
    std::cout << "thread completed\n";
}
2
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
24.07.2016, 08:52  [ТС] 9
Цитата Сообщение от hoggy Посмотреть сообщение
#include <thread>
MSVS 10 выдаёт ошибку: "fatal error C1083: Не удается открыть файл включение: thread: No such file or directory."
0
Неэпический
 Аватар для Croessmah
18116 / 10702 / 2063
Регистрация: 27.09.2012
Сообщений: 26,958
Записей в блоге: 1
24.07.2016, 09:13 10
Цитата Сообщение от hoggy Посмотреть сообщение
C++
1
std::thread launch([&obj]{ obj.foo(); });
Почему не
C++
1
std::thread launch(&sample::foo, &obj);
??
3
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.07.2016, 09:25 11
Цитата Сообщение от dailydose Посмотреть сообщение
MSVS 10
у вас слишком древняя ИДЕ.
и как следствие - слишком древний компилятор.

лучше конечно обновиться (до вижуал студии 2015)

но можно выехать и на стареньком компиляторе,
если напрямки задействовать WINAPI.

для этого используем технику "трамплин"

http://rextester.com/WOX63414

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
#include <iostream>  
#include <cassert>  
#include <windows.h>
 
 
struct Sample
{
    Sample(int v):m_v(v){}
    
    // функция-член потока
    void ThreadFunction() const
    {
        std::cout << "thread started...\n";
        for(size_t n=0; n<5; ++n)
            std::cout << m_v * n << "\n";
        
        std::cout << "thread completed."
                  << std::endl;
    }
    
    // трамплин
    static DWORD WINAPI ThreadProc(LPVOID lpParam) 
    {
        Sample* obj = static_cast<Sample*>(lpParam);
        assert(obj);
        
        obj->ThreadFunction();
        return 0;
    }
    
    int m_v;
};
 
 
int main() 
{
    Sample obj(10);
    
    const HANDLE hThread = CreateThread(NULL, 0, &Sample::ThreadProc, &obj, 0, NULL);
    assert(hThread!=NULL);
    
    const DWORD result = WaitForSingleObject(hThread, INFINITE);
    
    assert(result == WAIT_OBJECT_0);
    std::cout << "success!\n";
    
    CloseHandle(hThread);
}
Добавлено через 6 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Почему не
потому что было уже за полночь.
я попивал кофеек,
наслаждаясь просмотром афигительно
интересной кинокартины "Банког-Хилтон" (рекомендую!),
c несравненной Николь Кидман в главных ролях,
и параллельно рассуждал о лямбдах.

но вот сейчас утро.
я до сих смотрю Банког (он из нескольких серий),
по прежнему пью кофеек.
но больше не думаю о лямбдах (надоели).
и да, теперь я вижу: лямбда была пожалуй избыточной.

как говорится, утро вечера мудренее
1
2 / 2 / 3
Регистрация: 05.07.2016
Сообщений: 12
24.07.2016, 09:34 12
C++
1
2
3
#include <process.h>
_beginthreadex
_endthreadex
а это старый СИшный вариант?
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
24.07.2016, 09:44  [ТС] 13
Цитата Сообщение от hoggy Посмотреть сообщение
лучше конечно обновиться (до вижуал студии 2015)
Спасибо, сейчас этим и займусь.

(Добавление)
Цитата Сообщение от Croessmah Посмотреть сообщение
Почему не
std::thread launch(&sample::foo, &obj);
??
эт же вроде получается что метод foo класса sample - статический?

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
но можно выехать и на стареньком компиляторе,
если напрямки задействовать WINAPI.
для этого используем технику "трамплин"
слишком замудрено
0
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.07.2016, 10:16 14
Цитата Сообщение от Knuckles124 Посмотреть сообщение
_beginthreadex
_endthreadex
а это старый СИшный вариант?
это - костыли, которыми Майкрософт подперли косячный CreateThread.

A thread in an executable that calls the C run-time library (CRT) should use the _beginthreadex and _endthreadex functions for thread management rather than CreateThread and ExitThread; this requires the use of the multithreaded version of the CRT. If a thread created using CreateThread calls the CRT, the CRT may terminate the process in low-memory conditions.
(с)msdn
https://msdn.microsoft.com/en-... s.85).aspx
начиная с с++11, комитет наконец то все таки признал существование тредов,
и ввел поддержку многопоточного программирования.

std::thread - платформо независимое решение.
разработчики которого учли всевозможные грабли конкретных платформ.

поэтому, имея такую вещь в арсенале,
использование winapi можно считать морально устаревшим
в 99,9% всех случаев.

Добавлено через 48 секунд
Цитата Сообщение от dailydose Посмотреть сообщение
эт же вроде получается что метод foo класса sample - статический?
обычная функция-член,
которая будет запущена для указанного объекта.
1
Croessmah
24.07.2016, 11:58
  #15

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
как говорится, утро вечера мудренее
Ясненько :)

0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
24.07.2016, 12:02  [ТС] 16
Цитата Сообщение от hoggy Посмотреть сообщение
обычная функция-член, которая будет запущена для указанного объекта.
Окей. Спасибо огромное за разъяснения. Класс теперь более менее нормальный нет необходимости делать большую часть полей/методов статическими.

А как теперь использовать mutex вместе с std::thread?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    App app;
    /*app.start();*/
 
 
    const HANDLE hMutex = CreateMutex(NULL, FALSE, NULL);
 
    // Begin thread for KEY HANDLING
    thread keyHandler(&App::keyHandling, &app);
    keyHandler.detach();
 
    // Begin thread for TRAINER ACTIONS
    thread action(&App::actions, &app);
    action.join();
 
    CloseHandle(hMutex);
    return 0;
По идеи в качестве аргумента нужно передать этот самый hMutex, но как это сделать?
C++
1
std::thread launch(&sample::foo, &obj, hMutex);
так?
Кликните здесь для просмотра всего текста
void App::actions
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
void App::actions(/*CONST LPVOID lpParam*/)
{
    /*const HANDLE hMutex = (CONST HANDLE)lpParam;*/
    while(true)
    {
        /*WaitForSingleObject(hMutex, INFINITE);*/
 
        // Close Trainer IF GAME is NOT RUNNING
        if(!gameIsRun())
        {
            active = false;
            /*ReleaseMutex(hMutex);*/
            break;
        }
 
        // Continue IF GAME is not active
        if(!gameOnFocus())
        {
            /*ReleaseMutex(hMutex);*/
            Sleep(1000);
            continue;
        }
 
        // Continue IF PLAYER is DEAD
        iHealth = game.getHealth();
        if(iHealth < 1 || iHealth > MAX_HEALTH)
        {
            /*ReleaseMutex(hMutex);*/
            Sleep(1000);
            game.update();
            continue;
        }
 
        // Rewrite data if FREEZE FLAG enabled
        if(bGodMode)
        {
            game.setPoints(MAX_HEALTH, MAX_ARMOUR);
        }
        if(bUnAmmo)
        {
            game.updateAmmo();
        }
        /*ReleaseMutex(hMutex);*/
        Sleep(100);
    }
 
    //delete game;
}
void App::keyHandling
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
void App::keyHandling(/*CONST LPVOID lpParam*/)
{
    /*const HANDLE hMutex = (CONST HANDLE)lpParam;*/
 
    while(active)
    {
        /*WaitForSingleObject(hMutex, INFINITE);*/
 
        // Continue IF GAME is not active
        if(!gameOnFocus())
        {
            /*ReleaseMutex(hMutex);*/
            Sleep(1000);
            continue;
        }
 
        // Keyboard handling
        if(GetAsyncKeyState(KEY_GODMODE) & 1)
        {
            bGodMode = !bGodMode;
            speech(bGodMode);
        }
        if(GetAsyncKeyState(KEY_AMMO) & 1)
        {
            bUnAmmo = !bUnAmmo;
            speech(bUnAmmo);
        }
        if(GetAsyncKeyState(KEY_MONEY) & 1)
        {
            Trainer::setMoney(MONEY_AMMOUNT);
            speech(2);
        }
        /*ReleaseMutex(hMutex);*/
        Sleep(50);
    }
}
0
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.07.2016, 12:04 17
Цитата Сообщение от dailydose Посмотреть сообщение
А как теперь использовать mutex вместе с std::thread?
std::mutex

и вообще:
http://www.cplusplus.com/reference/thread/thread/
обратите внимание на вкладку reference
1
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
24.07.2016, 12:08  [ТС] 18
раньше был такой вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    HANDLE hThread[2];
    const HANDLE hMutex = CreateMutex(NULL, FALSE, NULL);
 
    // Begin thread for KEY HANDLING
    hThread[0] = (HANDLE)_beginthreadex(NULL, 0, &keyHandler, hMutex, 0, NULL);
 
    // Begin thread for TRAINER ACTIONS
    hThread[1] = (HANDLE)_beginthreadex(NULL, 0, &action, hMutex, 0, NULL);
 
    WaitForMultipleObjects(2, hThread, FALSE, INFINITE); //3rd parameter (!)
    CloseHandle(hThread[0]);
    CloseHandle(hThread[1]);
    CloseHandle(hMutex);
    ExitProcess(0);
Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
std::mutex
и вообще:
http://www.cplusplus.com/reference/thread/thread/
обратите внимание на вкладку reference
Буду разбираться, позже отпишусь
0
Неэпический
 Аватар для Croessmah
18116 / 10702 / 2063
Регистрация: 27.09.2012
Сообщений: 26,958
Записей в блоге: 1
24.07.2016, 12:10 19
Цитата Сообщение от dailydose Посмотреть сообщение
Буду разбираться, позже отпишусь
На всякий случай: Литература C++
1
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
24.07.2016, 12:38  [ТС] 20
Цитата Сообщение от Croessmah Посмотреть сообщение
На всякий случай: Литература C++
На досуге почитаю

Добавлено через 10 секунд
Цитата Сообщение от dailydose Посмотреть сообщение
в качестве аргумента нужно передать этот самый hMutex, но как это сделать?
C++
1
2
3
4
5
const HANDLE hMutex = CreateMutex(NULL, FALSE, NULL);
//..
std::thread launch(&sample::foo, &obj, hMutex);
//..
CloseHandle(hMutex);
как не странно, но это сработало.

Цитата Сообщение от hoggy Посмотреть сообщение
Просто интереса ради спрошу: а чем этот вариант лучше приведенного мною выше?
0
24.07.2016, 12:38
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.07.2016, 12:38
Помогаю со студенческими работами здесь

Выбор кафедры в дальнейшей жизни: прикладное программирование VS системное программирование
Сразу извиняюсь что очень не по теме но всё же лучшего форума для этого вопроса я не нашел. Итак я...

Хочу изучать программирование какой язык программирование выбрать ?
Хочу изучать программирование какой язык (С, С++, С# или Delphi) программирование выбрать ? Цель...

Программирование функций, Программирование процедур, рекурсивную подпрограммa
1 (Программирование функций) Вычислить площадь правильного шестиугольника со стороной a, используя...

Криптография, многопоточное программирование, сетевое программирование
Не знаю, с чего начать, подскажите: В этом задании необходимо реализовать клиент-серверное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru