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

любителям критики - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перегруженный оператор вывода http://www.cyberforum.ru/cpp-beginners/thread925936.html
Есть базовый класс Точка и его наследник Круг. Как в Круге использовать operator<< для Точки? Надо вывести координаты центра круга class CPoint { friend std::ostream &operator<<(std::ostream &out, const CPoint &point); public: CPoint(double x=0.0, double y=0.0);
C++ Файловый ввод Дело в том, что у меня во всех программах почему то не работает scanf в циклах for. Напhимер: for(int index = 0; index<b.size(); ++index) { scanf("%d", b); } b это вектор чисел. Программы аварийно закрываются, или еще какие ошибки. Когда меняю на cin все нормально: for(int index = 0; index<b.size(); ++index) { cin >> b; } http://www.cyberforum.ru/cpp-beginners/thread925924.html
C++ Программа которая отправляет файл на почту
Я вот думаю, сложно ли написать программу который будет отправлять какой-то конкретный файл юзера который её запустит на почту? P.S. Это не незаконные дела, всё законно, по правилам)Просто интерессно как такое сделать) P.P.S. Тему не закрывайте, смотрите P.S. ))
C++ Просрочен лимит времени
Я решал задачу, вот она: Проблема в том, что я когда заносил в массив данные через scanf, то она выполнялась 2,5 секунды, а когда я использовал cin, то где-то 0.363 миллисекунды. В чем дело. Говорят же что scanf быстрее!!! Вот сама программа, а считывание про которое я говорю находится в цикле for: #include<iomanip> #include<iostream> #include<fstream> #include<algorithm> using namespace...
C++ Программа которая ворует пароли http://www.cyberforum.ru/cpp-beginners/thread925895.html
Вот мне интерессно, трудно (назовите хоть примерное количество строк) ли написать программу которая будет воровать пароли, ну, хотя бы, от одного браузера конкретного.Если возможно то от всех, я же не знаю сколько будет занимать строк воровство пароля от одного браузера :D Я ещё подумал, когда-то писал пограмму которая будет на мыло письмо кидать, так можно это реализовать кинув, допустим, файл...
C++ Русский текст в консоли Проблема банальная - русский текст в консоли. До конца в кодировках я так и не разобрался, поэтому прошу помощи. Я нашел 3 способа как решить эту проблему : 1) setlocale( LC_ALL,"Russian" ) // Как я понял она просто меняет кодировку консоли.Где-то читал что на XP у неё проблемы. У меня XP SP2 и среда code blocks. В общем она не пашет у меня. 2)CharToOem() // Как я понял преобразует строку в... подробнее

Показать сообщение отдельно
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
20.07.2013, 12:48  [ТС]     любителям критики
Цитата Сообщение от BigLow Посмотреть сообщение
и в чем смысл этой функции?)
на стадии разработки её случайно написал, удалю.

Добавлено через 7 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
В цикле удалять содержимое мапы ТАК не стоит, ибо
C++
1
2
for (int i = 0; i < count; i++) // выберем случайный элемент на заданную букву
            it++;
я не в цикле удаляю , к циклу относится только одно выражение

всем спасибо, буду исправлять

Добавлено через 25 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
city.erase(it); // данный город больше использовать нельзя
я посмотрел не из того метода, да это выражение используется в цикле, но ведь цикл сразу прекращается после удаления, и даже при работе рекурсии если произошло удаление слова, больше ничего из МАПа не удалится

Добавлено через 12 минут
переделал
main.cpp
Кликните здесь для просмотра всего текста
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
// ---------------------------------------------------------------------------
#pragma hdrstop
#include <iostream>
 
#include <string>
#include "AI_city.h"
#include <direct.h>
#include <vector>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
 
using namespace std;
 
int main() {
 
    // установка параметров
    int human_player = 1;
    int computer_player = 3;
 
    for (int i = 0; i < 16; i++) {
        for (int j = 0; j < 16; j++)
            cout << char(i * 16 + j) << " ";
        cout << endl;
    }
 
    cout << "ўўҐ¤ЁвҐ Є®«ЁзҐбвў® ЁЈа®Є®ў - «о¤Ґ©" << endl;
    cin >> human_player;
    cout << "ўўҐ¤ЁвҐ Є®«ЁзҐбвў® ЁЈа®Є®ў - Є®¬ЇмовҐа®ў" << endl;
    cin >> computer_player;
    // // установка параметров
    // иницилизация
    char buffer[256];
    vector<Cplayer*>player;
 
    string patch_data = getcwd(buffer, 255);
    patch_data += "\\data\\words.txt";
    srand(time(0));
 
    string name;
    char number[10];
    Cplayer *tmp_player_ptr;
    for (int i = 0, c_h = human_player; i < human_player; i++) {
 
        tmp_player_ptr = new Chuman;
        c_h--; // уменьшение вакансий человека
        name = "祫®ўҐЄ N ";
        itoa(human_player - c_h, number, 10); // формирование номера
        name += number; ; // присвоение номера
        tmp_player_ptr->SetName((char*)name.c_str()); // присвоение имени
        player.push_back(tmp_player_ptr); // добавление игрока
    }
 
    for (int i = 0, c_c = computer_player; i < computer_player; i++) {
        tmp_player_ptr = new Ccomputer;
        c_c--;
        name = "Є®¬ЇмовҐа N ";
        itoa(computer_player - c_c, number, 10);
        name += number; ;
        tmp_player_ptr->SetName((char*)name.c_str());
        player.push_back(tmp_player_ptr); // добавление игрока
    }
 
    for (int i = 0, r1, r2; i < (human_player + computer_player) / 2; i++) {
        r1 = rand() % player.size();
        r2 = rand() % player.size();
        Cplayer *tmp_player_ptr;
        tmp_player_ptr = player[r1];
        player[r1] = player[r2];
        player[r2] = tmp_player_ptr; // обмен
    }
    player[0]->init(patch_data); // загрузка слов
    // иницилизация
 
    string command;
 
    cout << "**з*«® ЁЈал, ЇҐаўл© Ј®а®¤ : "; // начало игры
    unsigned char last_letter = player[0]->first();
    vector<Cplayer*>::iterator ip = player.begin();
    while (player.size() > 1) {
        if (ip == player.end())
            ip = player.begin(); // закольцевание
 
        last_letter = ip[0]->stroke(last_letter); // получение буквы на которую должно начинатся следующее слово
        SetConsoleTextAttribute(hSTDOut,
            FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
        // графический режим
        if (!last_letter) {
            delete ip._Myptr[0];
            player.erase(ip); // удаляем игрока
            cout << "®бв*«®бм ";
            cout << player.size();
            cout << " ЁЈа®Є®ў" << endl; // пишем сколько осталось игроков
            if (player.size() == 1)
                break;
            cout << "ўлЎ®а б«гз*©*®Ј® Ј®а®¤*, **§ў**ЁҐ Ј®а®¤* : ";
            last_letter = player[0]->first();
            Sleep(2000); // задерживаем время в случаи удаления игрока
        }
        else
            ip++;
    }
    player[0]->win(); // победа
 
    system("pause");
    return 0;
}
// ---------------------------------------------------------------------------

AI_city.h
Кликните здесь для просмотра всего текста
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
// ---------------------------------------------------------------------------
 
#ifndef AI_cityH
#define AI_cityH
 
 
#include <string>
#include <windows.h>
using std::string;
 
static HANDLE hSTDOut = GetStdHandle(STD_OUTPUT_HANDLE);
inline char toupper_doc(unsigned char c) {
    return c < 16 * 13 ? c - 32 : c - 80; // борьба с кодировкой доса
}
// после 13 ряда (по 16 символов в каждом) у нас вместо продолжение строчных русских букв идёт абракадабра
//абракадабра продолжается три ряда, далее идут остальные строчные русские бувы
// растояния между одной группой строчных букв до заглавных равно $ - 32 (2 ряда)
// растояния между второй группой строчных букв до заглавных равно $ - 80 (2 + 3 ряда)
// знак "$" позаимствовал у ассемблера, он означает текущий адресс на который указывает IP
// игрок
class Cplayer {
protected:
    string name;
 
public:
    Cplayer(){}
    virtual ~Cplayer(){}
    void SetName(string name_);
    char first();
    bool init(string name_file);
    virtual char stroke(char l){return true;}// возвращаю значение дабы избежать предупреждения
    void win();
};
// игрок человек
class Chuman : public Cplayer {
protected:
    int life;
public:
    Chuman();    // присваивается количество жизней
    virtual ~Chuman(){}
    virtual char stroke(char l); // игровой ход
};
// игрок компьютер
class Ccomputer : public Cplayer {
 
public:
    Ccomputer(){}
    virtual ~Ccomputer(){}
    virtual char stroke(char l);   // игровой ход
 
};
 
// ---------------------------------------------------------------------------
#endif

AI_city.cpp
Кликните здесь для просмотра всего текста
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
// ---------------------------------------------------------------------------
 
#pragma hdrstop
#include <string>
#include <map>
#include <iostream>
#include <fstream>
 
#include "AI_city.h"
 
using namespace std;
 
static multimap<char, string>city;
static bool init_true;
 
void Cplayer::SetName(string name_) { // установка имени игрока
    name = name_;
}
 
void Cplayer::win() {
    cout << "Ї®ЎҐ¤Ё« ЁЈа®Є : ";
    cout << name.c_str() << endl;
}
 
char Cplayer::first() { // выбор первого элемента в контейнере
    multimap<char, string>::iterator it = city.begin();
    cout << it->second.c_str() << endl << endl;
    char letter = it->second[it->second.size() - 1];
    letter = toupper_doc(letter); // преобразуем в верхний регистр
    city.erase(it); // данный город больше использовать нельзя
    return letter;
}
 
bool Cplayer::init(string name_file) { // загрузка слов
    fstream file;
    string tmp_city;
    file.open(name_file.c_str(), ios::in); // мой компилятор не хочут чтобы функция open принимала переменную типа string
    if (file.good()) {
        while (!file.eof()) {
            getline(file, tmp_city); // чтение города
            city.insert(pair<char, string>(tmp_city[0], tmp_city));
            // запись города
        }
        return true;
    }
    return false;
}
 
Chuman::Chuman() {
    life = 3; // жизни человека
}
 
char Chuman::stroke(char l) {  // ход человека
    SetConsoleTextAttribute(hSTDOut, FOREGROUND_GREEN);
 
    string command;
    unsigned char r;
    cout << "ЁЈа®Є : ";
    cout << name.c_str() << " ";
    cout << "®вўҐз*Ґв : ";
    cin >> command; // запрос города
    r = command[command.size() - 1]; // установка последней буквы
 
    multimap<char, string>::iterator it = city.find(l);
 
    int count = city.count(l); // количество слов на заданную букву
    for (int i = 0; i < count; i++, it++) {
        if (it->second == command) { // проверим еслть ли слово игрока в списке
            city.erase(it); // данный город больше использовать нельзя
            cout << "б«Ґ¤гойЁ© Ј®а®¤ ¤®«¦Ґ* **зЁ**rвбп ** ЎгЄўг : ";
            r = toupper_doc(r); // к верхнему регистру
            cout << r << endl << endl;
            return r;
        }
    }
    cout << "ЌҐв в*Є®Ј® б«®ў* «ЁЎ® ®*® 㦥 ЁбЇ®«м§®ў*«®бм " << endl;
    // даём ещё шанс
    life--;
    if (life) { // пока не кончатся  жизни
        cout << "“ ў*б ®бв*«®бм " << life << " ¦Ё§*Ґ©, " << "Ї®Їа®Ўг©вҐ Ґйс" <<
        endl;
        r = stroke(l); // так мы можем судить об успехе рекурсии
        return r;
    }
    cout << "ЁЈа®Є " << name << " Їа®ЁЈа*«, ®* г¤*«с* Ё§ ЁЈал" << endl;
    // нас удалили
    return 0;
 
}
 
char Ccomputer::stroke(char l) {  // ход компьютера
    SetConsoleTextAttribute(hSTDOut, FOREGROUND_GREEN | FOREGROUND_RED);
    unsigned char r;
    int count = city.count(l);
    if (count) { // компьютер знает город
        count = rand() % count;
        multimap<char, string>::iterator it = city.find(l);
        for (int i = 0; i < count; i++) // выберем случайный элемент на заданную букву
            it++;
 
        cout << "ЁЈа®Є : ";
        cout << name.c_str() << " ";
        cout << "®вўҐз*Ґв : "; // "игрок № отвечает "
 
        cout << it->second.c_str() << endl; // ответ
        cout << "б«Ґ¤гойЁ© Ј®а®¤ ¤®«¦Ґ* **зЁ**вбп ** ЎгЄўг : ";
        r = it->second[it->second.size() - 1]; // установка последней буквы
        r = toupper_doc(r); // преобразуем в верхний регистр
        cout << r << endl;
 
        city.erase(it); // данный город больше использовать нельзя
 
    }
    else { // компьютер не знает город
        SetConsoleTextAttribute(hSTDOut, FOREGROUND_RED);
        // устанавливаем красный режим
        cout << "ЁЈа®Є : ";
        cout << name.c_str();
        cout << " *Ґ §**Ґв **§ў**Ёп Ј®а®¤* ** ЎгЄўг ";
        cout << (char)(l);
        cout << " ®*  г¤*«с* Ё§ ЁЈал " << endl; // игрок выбыл
        r = 0; // код удаления
    }
    cout << endl;
    return r;
 
}
 
// --------------------------------------------------------------------------
 
Текущее время: 02:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru