Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2012, 00:29   #1
Banner
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 35
Печаль Задания по с++

Я уже год изучаю с++. Я многое знаю. Но не могу применить знания на практике. Учу я по книжкам(тк учусь в 9классе). Есть ли сборники задач по с++. Или дайте их сами.
Banner вне форума Ответить с цитированием
Старый 22.02.2012, 00:45   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Задание: в консоли сделать текстовую игру "Монополия".

В игре необходимо предусмотреть возможность играть за одним компьютером нескольким игрокам, а так же, игру с неограниченным количеством компъютерных игроков.

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

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

В игре должна быть реализована возможность сохранять/загружать игру.

Должна быть реализована специальная утилита, которая позволяет загружать сохраненную игру, и изменять состояние игры (например, добавить денег одному из игроков, и тп).

Задача должна быть выполнена в течении 365 дней.

Последний раз редактировалось _Bers; 22.02.2012 в 18:16.
_Bers вне форума Ответить с цитированием
Старый 22.02.2012, 17:45   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Banner, подборка задач. Решайте, спрашивайте, разберём.

1. (просто) Написать программу, которая вычисляет частное от деления двух чисел. Программа должна проверять введённые числа, и если делитель равен нулю, выдавать сообщение об ошибке.

2. (просто) Во входном файле записана последовательность натуральных чисел. Количество чисел в последовательности не превышает 100. Выведите в выходной файл количество чисел в последовательности (не считая 0), а потом сами числа.
Пример:
входной файл: 1 3 5 0
выходной файл: 3
1 3 5

3. (сложно) То же, что и 2, но использовать только функции работы с файлами из WinAPI (CreateFile, WriteFile, ReadFile, и т.д.).

4. (просто) В квадратной таблице N*N подсчитать суммы чисел стоящих на диагоналях. Во входном файле содержится число N (1 <= N <= 100), а затем матрица N*N. Элементы матрицы – числа из диапазона integer. В выходной файл выдать сначала сумму чисел на главной, а затем на побочной диагонали.
Пример входного файла:
3
1 2 4
4 5 6
10 9 8
Пример выходного файла:
14 18

5. (средне) Программа получает с помощью генератора случайных чисел целое положительное число. Выводит его на экран и для каждой цифры (0, 1, 2, 3, …, 9) выводит количество вхождений данной цифры в числе.
Например: число 12335733
0 – 0
1 – 1
2 – 1
3 – 4
4 – 1
5 – 0
6 – 0
7 – 1
8 – 0
9 – 0

6. (средне) Реализовать класс «матрица», переопределить операции сложения, вычитания, умножения. Реализовать транспонирование. Пользователь сам задаёт размеры матрицы. Проверяются условия, необходимые для выполнения тех или иных действий и выводятся сообщения об ошибках.

7. (просто) Дана квадратная матрица порядка n. В строках с отрицательным элементом на главной диагонали найти наибольший из всех элементов.

8. (просто) Вывести все буквы исходного текста через пробел заглавными буквами.

9. (средне) Решить систему уравнений произвольного порядка (от 2 до 5) или вывести сообщение, если решения нет.
Например:
порядок 2
1*x1 + 2*x2 = 4
2*x1 + 3*x2 = 7
Ответ: x1 = 2, x2 = 1

10. (средне) Ввод с клавиатуры координат вершин для двух треугольников. Нарисовать на экране треугольники, причём, если один из треугольников помещается внутри другого, закрасить область внешнего треугольника, которая окружает внутренний.

11. (просто) При нажатии кнопкой мыши в клиентской области окна, соединить линией данную точку с точкой предыдущего нажатия.

12. (просто) То же, что и 11, плюс сохранение точек нажатия в файл.
8Observer8 вне форума Ответить с цитированием
Старый 22.02.2012, 20:43   #4
Banner
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 35
По умолчанию

Спасибо! При наличии свободного времени прорешаю!!!
Banner вне форума Ответить с цитированием
Старый 22.02.2012, 20:49   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Не за что! Не затягивайте. Решите для начала хоты бы простые.
8Observer8 вне форума Ответить с цитированием
Старый 24.02.2012, 08:40   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Banner, политика форума такова, что все темы носят общеразвивающий характер. Даже если кто-то из нас заблуждается, то не стоит об этом умалчивать. С большой вероятностью найдутся старшие товарищи, которые укажут на эти заблуждения. Это большое преимущество общения на форуме. Поэтому кроме личного общения давайте развивать вашу тему.

Перед тем, как продолжить разбор вашего кода, проделайте следующее:

1) Скачайте книгу "Совершенный код" Стива Макконнелла (я её покупал в бумажном виде, что и вам советую, год издания моей книги 2007; может есть более новые издания).

2) Найдите в содержании главу "Сила имён переменных". В моей книге это глава 11, стр. 252.

3) Прочитайте указанную выше главу (она небольшая и много времени у вас не отнимет).

4) После прочтения главы постарайтесь исправить имена своих переменных с использованием рекомендаций Стива.

5) В этой же книге найдите в содержании главу "Форматирование и стиль". В моей книге это глава 31, стр. 712.

6) Прочитайте указанную выше главу. Она также небольшая.

7) Отформатируйте ваш код в соответствии с рекомендациями Стива.

8) Выложите сюда ваш код (либо пришлите мне, но лучше в вашу тему).
8Observer8 вне форума Ответить с цитированием
Старый 24.02.2012, 20:26   #7
Banner
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 35
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Banner, политика форума такова, что все темы носят общеразвивающий характер. Даже если кто-то из нас заблуждается, то не стоит об этом умалчивать. С большой вероятностью найдутся старшие товарищи, которые укажут на эти заблуждения. Это большое преимущество общения на форуме. Поэтому кроме личного общения давайте развивать вашу тему.

Перед тем, как продолжить разбор вашего кода, проделайте следующее:

1) Скачайте книгу "Совершенный код" Стива Макконнелла (я её покупал в бумажном виде, что и вам советую, год издания моей книги 2007; может есть более новые издания).

2) Найдите в содержании главу "Сила имён переменных". В моей книге это глава 11, стр. 252.


3) Прочитайте указанную выше главу (она небольшая и много времени у вас не отнимет).

4) После прочтения главы постарайтесь исправить имена своих переменных с использованием рекомендаций Стива.

5) В этой же книге найдите в содержании главу "Форматирование и стиль". В моей книге это глава 31, стр. 712.

6) Прочитайте указанную выше главу. Она также небольшая.

7) Отформатируйте ваш код в соответствии с рекомендациями Стива.

8) Выложите сюда ваш код (либо пришлите мне, но лучше в вашу тему).
7-ое задание
Если я не так вас понял, есть одно этому объяснение - я девятиклассник

Код:
#include <iostream>

using namespace std;


int main(){
    
    srand(time(0));
    
    int matrix_Size; //размер матрицы
    cin >> matrix_Size;//ввод размера матрицы
    
    int x=matrix_Size-1;//х координата матрицы = самая правая точка
    int y=matrix_Size-1;//у координата матрицы = самая нижняя точка
    int count=0;//счечик для чисел массива строки 
    int massiv_stroki[matrix_Size]; //массив строки с отрицательным числом в главной диагонали.
    int newx; //новый х для перемещения в начало строки
    
   int _matrixMassiv[matrix_Size][matrix_Size]; //двухмерный массив для создания матрицы случайных чисел matrix_Size*matrix_Size
   
   
   
   
   
   for(int i=0;i<matrix_Size;i++){
           for(int j=0;j<matrix_Size;j++){
                   _matrixMassiv[i][j]=rand()%20-10;   //заполнение матрицы случайными числами от -10 до 10
}

}
    
    
    for(int i=0;i<matrix_Size;i++){ //генерация матрицы
            for(int j=0;j<matrix_Size;j++){
                    cout << " " << _matrixMassiv[i][j]<< " " << "|";
                    }
                    cout << endl;
                    }
   
   
   
    while(x!=-1){//пока не проверится вся диагональ(снизу вверх)
            
            
            cout << _matrixMassiv[y][x] << " "; //вывод значения чисел диагонали
            
            if(_matrixMassiv[y][x]<0){//условие отрицательного числа в главной диагонали
            cout << "otr ";
            
            newx=0;
            
            
            
            while(newx!=matrix_Size){
            cout << endl << _matrixMassiv[y][newx];
            massiv_stroki[count]=_matrixMassiv[y][newx];
            
            
            newx++;
            count++;
            }
            count=0;
           
           int maxnumber=massiv_stroki[0]; //максимаьное число в строке
  
   
    
    
    
    
   for(int i=0;i<matrix_Size;i++){
            if(massiv_stroki[i]>maxnumber) //ищет среди массива строки наибольшее число
            maxnumber=massiv_stroki[i];
            }
    
    cout << "\nmax : " << maxnumber << endl;
            }
  
            y--;//движение вверх по главной диагонали
            x--;//движение вверх по главной диагонали
            }
    
    
    
    
    
    
    
    
    cin.get();
    cin.get();
    return 0;
}
ПС: если не понятны некоторые строчки моего быдлокода ,объясню

Последний раз редактировалось Banner; 24.02.2012 в 20:31.
Banner вне форума Ответить с цитированием
Старый 25.02.2012, 11:52   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

По поводу третьего задания. Вот пример использования CreateFile, WriteFile, ReadFile. Пример кода максимально упрощенный.

CreateFile --> http://msdn.microsoft.com/en-us/library/aa914735.aspx
WriteFile --> http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
ReadFile --> http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Вот все фунции манипуляции с файлами --> http://msdn.microsoft.com/en-us/library/aa916914.aspx

А можно скачать документацию "Windows® Platform SDK" -->

http://www.microsoft.com/download/en...ng=en&id=18950
Там тоже самое почти. Использую SDK, так как здесь примеров больше.

Следующая Программа:

- открывает файл (первый вызов функции CreateFile).
Примечание - Файл должен существовать и в нём должны быть записаны два числа.
Ограничения - Числа должны быть меньше либо равны 9 (и результат тоже).

- считывает два целых числа из открытого файла (функция ReadFile)

- складывает считанные числа ( sum = a + b; )

- создаёт файл (второй вызов функции CreateFile)

- сохраняет результат в этот созданный файл (функция WriteFile)

- закрывает файл с входными данными (CloseHandle(hInputFile))

- закрывает файл с выходными данными (CloseHandle(hOutputFile))

Код:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#define SBUF 20

int main ()
{
    // перенные для считывания входных данных
    HANDLE hInputFile; 
    char inBuffer[SBUF];
    DWORD nBytesToRead = 1;
    DWORD nBytesRead = 0;

    // переменные для обработки данных
    int sum, a, b;

    // переменные для записи выходных данных
    HANDLE hOutputFile;
    char outBuffer[SBUF];
    DWORD nBytesToWrite = 1;
    DWORD nBytesWritten = 0;

    // открываем файл, чтобы прочитать данные из него
    hInputFile = CreateFile(TEXT("input_file.txt"),    // file to open
                            GENERIC_READ,              // open for reading
                            FILE_SHARE_READ,           // share for reading
                            NULL,                      // default security
                            OPEN_EXISTING,             // existing file only
                            FILE_ATTRIBUTE_NORMAL,     // normal file
                            NULL);                     // no attr. template

    // проверяем: получилось ли у нас открыть файл
    if (hInputFile == INVALID_HANDLE_VALUE) 
    { 
        printf("Could not open file (error %d)\n", GetLastError());
        return 0;
    }

    // читаем входные данные из файла
    // считываем первое число
    ReadFile(hInputFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ;
    a = atoi(inBuffer);

    // пропускаем пробел
    ReadFile(hInputFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ;

    // считываем второе число
    ReadFile(hInputFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ;
    b = atoi(inBuffer);

    // обрабатываем данные
    sum = a + b;

    // создаём файл для обработанных данных
    hOutputFile = CreateFile(TEXT("output_file.txt"),  // file to create
                             GENERIC_WRITE,            // open for writing
                             0,                        // do not share
                             NULL,                     // default security
                             CREATE_ALWAYS,            // overwrite existing
                             FILE_ATTRIBUTE_NORMAL,    // normal file
                             NULL);                    // no attr. template

    // проверяем: получилось ли у нас создать и открыть файл
    if (hOutputFile == INVALID_HANDLE_VALUE) 
    { 
        printf("Could not open file (error %d)\n", GetLastError());
        return 0;
    }

    // сохраняем обработанные данные в созданный файл
    sprintf(outBuffer, "%d", sum);
    WriteFile(hOutputFile, &outBuffer, nBytesToWrite, &nBytesWritten, NULL);

    // закрываем файл, из которого мы прочитали три целых числа
    CloseHandle(hInputFile);

    // закрываем файл, в который мы сохранили результат
    CloseHandle(hOutputFile);

    return 0;
}
P.S. Если непонятно, что такое handle. Вот определение неплохое нагуглил: handle - это указатель на структуру, описывающую свойства какого-то конкретного объекта, например, какого-то окна, процесса, файла... Используется для изменения свойств этого объекта или получения сведений о его свойствах.
P.S.S. Код ваш попозже посмотрю.

Последний раз редактировалось 8Observer8; 25.02.2012 в 12:01.
8Observer8 вне форума Ответить с цитированием
Старый 26.02.2012, 10:21   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

В Dev-C++ есть неудобная опция "Умная табуляция". Я её сразу убрал.

Сервис -> Параметры редактора -> Умная табуляция (убрать галочку)

Там же уберите галочку "Использовать табуляцию" и выберите размер табуляции 4. (табуляция будет заменятся четырьмя пробелами)

И перед тем, как выкладывать код поставьте галочку "Показывать невидимые символы" (здесь же в параметрах редактора). Посмотрите на код и удалите ненужные пробелы. Верните галочку обратно.

Вот ваш код после форматирования (выравнивания). Неправда ли намного легче читать!

Код:
#include <iostream>

using namespace std;

int main()
{
    srand(time(0));

    int matrix_Size; //размер матрицы
    cin >> matrix_Size;//ввод размера матрицы
    
    int x=matrix_Size-1;//х координата матрицы = самая правая точка
    int y=matrix_Size-1;//у координата матрицы = самая нижняя точка
    int count=0;//счечик для чисел массива строки 
    int massiv_stroki[matrix_Size]; // массив строки с отрицательным
                                    // числом в главной диагонали.
    int newx; //новый х для перемещения в начало строки

    int _matrixMassiv[matrix_Size][matrix_Size]; // двухмерный массив для
                                                 // создания матрицы случайных 
                                                 // чисел matrix_Size*matrix_Size

    for(int i=0;i<matrix_Size;i++) {
        for(int j=0;j<matrix_Size;j++) {
            _matrixMassiv[i][j]=rand()%20-10;   //заполнение матрицы случайными 
                                                // числами от -10 до 10
        }
    }

    for(int i=0;i<matrix_Size;i++){ //генерация матрицы
        for(int j=0;j<matrix_Size;j++) {
            cout << " " << _matrixMassiv[i][j]<< " " << "|";
        }
        cout << endl;
    }

    while(x!=-1) {//пока не проверится вся диагональ(снизу вверх)
        cout << _matrixMassiv[y][x] << " "; //вывод значения чисел диагонали
        if (_matrixMassiv[y][x]<0) {// условие отрицательного числа в главной
                                    // диагонали
            cout << "otr ";
            newx=0;
            while(newx!=matrix_Size) {
                cout << endl << _matrixMassiv[y][newx];
                massiv_stroki[count]=_matrixMassiv[y][newx];
                newx++;
                count++;
            }
            count=0;
            int maxnumber=massiv_stroki[0]; // максимаьное число в строке
            for(int i=0;i<matrix_Size;i++) {
                if(massiv_stroki[i]>maxnumber) // ищет среди массива строки
                                               //наибольшее число
                    maxnumber=massiv_stroki[i];
            }
            cout << "\nmax : " << maxnumber << endl;
        }
        y--;//движение вверх по главной диагонали
        x--;//движение вверх по главной диагонали
    }

    cin.get();
    cin.get();
    return 0;
}
P.S. В целом код неплохой. Детали будем постепенно анализировать. Решайте дальше.
P.S.S. По поводу системных вызовов операционной системы: используйте их только в случае крайней необходимости, когда, к примеру, в стандартной библиотеке языка нет нужных средств. Но изучать их всё-равно нужно.
P.S.S.S. Обратите внимание, что в редакторе Dev-C++ есть ограничительная вертикальная линия справа. Вот за эту линию старайтесь не вылазить со своими комментариями.

Последний раз редактировалось 8Observer8; 26.02.2012 в 10:30.
8Observer8 вне форума Ответить с цитированием
Старый 27.02.2012, 16:38   #10
Banner
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 35
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
В Dev-C++ есть неудобная опция "Умная табуляция". Я её сразу убрал.

Сервис -> Параметры редактора -> Умная табуляция (убрать галочку)

Там же уберите галочку "Использовать табуляцию" и выберите размер табуляции 4. (табуляция будет заменятся четырьмя пробелами)

И перед тем, как выкладывать код поставьте галочку "Показывать невидимые символы" (здесь же в параметрах редактора). Посмотрите на код и удалите ненужные пробелы. Верните галочку обратно.

Вот ваш код после форматирования (выравнивания). Неправда ли намного легче читать!

Код:
#include <iostream>

using namespace std;

int main()
{
    srand(time(0));

    int matrix_Size; //размер матрицы
    cin >> matrix_Size;//ввод размера матрицы
    
    int x=matrix_Size-1;//х координата матрицы = самая правая точка
    int y=matrix_Size-1;//у координата матрицы = самая нижняя точка
    int count=0;//счечик для чисел массива строки 
    int massiv_stroki[matrix_Size]; // массив строки с отрицательным
                                    // числом в главной диагонали.
    int newx; //новый х для перемещения в начало строки

    int _matrixMassiv[matrix_Size][matrix_Size]; // двухмерный массив для
                                                 // создания матрицы случайных 
                                                 // чисел matrix_Size*matrix_Size

    for(int i=0;i<matrix_Size;i++) {
        for(int j=0;j<matrix_Size;j++) {
            _matrixMassiv[i][j]=rand()%20-10;   //заполнение матрицы случайными 
                                                // числами от -10 до 10
        }
    }

    for(int i=0;i<matrix_Size;i++){ //генерация матрицы
        for(int j=0;j<matrix_Size;j++) {
            cout << " " << _matrixMassiv[i][j]<< " " << "|";
        }
        cout << endl;
    }

    while(x!=-1) {//пока не проверится вся диагональ(снизу вверх)
        cout << _matrixMassiv[y][x] << " "; //вывод значения чисел диагонали
        if (_matrixMassiv[y][x]<0) {// условие отрицательного числа в главной
                                    // диагонали
            cout << "otr ";
            newx=0;
            while(newx!=matrix_Size) {
                cout << endl << _matrixMassiv[y][newx];
                massiv_stroki[count]=_matrixMassiv[y][newx];
                newx++;
                count++;
            }
            count=0;
            int maxnumber=massiv_stroki[0]; // максимаьное число в строке
            for(int i=0;i<matrix_Size;i++) {
                if(massiv_stroki[i]>maxnumber) // ищет среди массива строки
                                               //наибольшее число
                    maxnumber=massiv_stroki[i];
            }
            cout << "\nmax : " << maxnumber << endl;
        }
        y--;//движение вверх по главной диагонали
        x--;//движение вверх по главной диагонали
    }

    cin.get();
    cin.get();
    return 0;
}
P.S. В целом код неплохой. Детали будем постепенно анализировать. Решайте дальше.
P.S.S. По поводу системных вызовов операционной системы: используйте их только в случае крайней необходимости, когда, к примеру, в стандартной библиотеке языка нет нужных средств. Но изучать их всё-равно нужно.
P.S.S.S. Обратите внимание, что в редакторе Dev-C++ есть ограничительная вертикальная линия справа. Вот за эту линию старайтесь не вылазить со своими комментариями.
Спасибо за советы. При наличии св. времени прорешаю остальное
Banner вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задания с++ pksvova Общие вопросы C/C++ 6 01.11.2011 00:52
Задания pr0kazn1k Фриланс 5 22.12.2010 00:22
Задания BrosJke Общие вопросы Delphi 1 24.05.2010 07:24
3 задания Си nariku Помощь студентам 39 22.10.2009 15:43