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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
somebody11
14 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 29
#1

Дайте совет по оптимизации - C++

08.01.2012, 20:24. Просмотров 655. Ответов 10
Метки нет (Все метки)

Необходимо оптимизировать реализацию морского боя.
Изначально поле представлял в виде символьного массива, естественно длинной 10х10
при этом каждое обращение к элементу массива (х,у) сопровождалось вычислениями величины 10*y+x.
Можно попробовать заменить его на двумерный
так вот, хотелось бы узнать, действительно ли это даст нам преимущество во времени?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2012, 20:24     Дайте совет по оптимизации
Посмотрите здесь:

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

Разрженные матрицы дайте совет - C++
Здравствуйте, есть вот задание на курсовую: 1. Разреженная матрица С(пxп) хранится по схеме Кнута. Написать программу, которая создает...

Профессионалы программирования дайте совет - C++
Хочу стать отличным программистом. Если честно в школе до 9-го класса учился плохо в 10-11 поднажал чтобы поступить в институт,как бы...

Дайте совет по изучению программирования - C++
читал пару книжек по С++ но не до конца.Сейчас читаю Прата, вроде понимаю все что пишут, но есть упражнения после 11 глав которые зделать...

Среда разработки. Дайте совет - C++
Подскажите пожалуйста такой момент: я только изучаю ооп, так что пишу под консоль. Сейчас пользуюсь MVS.Все хорошо, но напрягает количество...

Дайте,пожалуйста, совет по поводу задания - C++
Есть односвязный список, нужно в і-ую позицию вставить элемент, как лучше бы это сделать? Создать вспомогательный указатель и с его помощью...

Дайте совет, куда двигаться дальше - C++
В общем хочу начать с того что 3 года назад я начинал совсем чайником который ничего не понимал в ЭВМ, я очень хотел стать программистом...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
08.01.2012, 20:27     Дайте совет по оптимизации #2
символьного массива
Может лучше массив из bool?
true = корабль есть
false = нет или он/его часть в этой клетки убита
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
08.01.2012, 20:29     Дайте совет по оптимизации #3
Доступ к одномерному массиву a[i] производиться так:
*(a+i)
а к двумерному a[i][j]
*(*(a+i)+j)
Как видите, и там(двумерный) и там(*(a+(10*y+x))) умножение

Цитата Сообщение от somebody11 Посмотреть сообщение
Можно попробовать заменить его на двумерный
Попробуйте. Вполне возможно, что читабельность кода возрастет, хотя может быть я и не прав.
Цитата Сообщение от somebody11 Посмотреть сообщение
Необходимо оптимизировать реализацию морского боя.
Код собственно не покажете?
somebody11
14 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 29
08.01.2012, 20:30  [ТС]     Дайте совет по оптимизации #4
Цитата Сообщение от hepr Посмотреть сообщение
Может лучше массив из bool?
true = корабль есть
false = нет или он/его часть в этой клетки убита
Дело в том, что вся работа проги завязана на символьных обозначениях, тем более Вы забыли про ранен или мимо
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
08.01.2012, 20:35     Дайте совет по оптимизации #5
забыли про ранен или мимо
Пользователь попадает в клетку с true, далее проверяем клетки вверху внизу справа снизу, если там хоть одна true, то ранил, если нет о убил
Если пользователь выбирает клетку с false, то мимо
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
08.01.2012, 20:40     Дайте совет по оптимизации #6
dimcoder, я тебе больше скажу, в одномерном при запросе по индексу тоже присутствует умножение(на sizeof(type)), но механизмы доступа у ТС и обычный для двумерного массива от этого одинаковыми не становятся.
hepr
61 / 33 / 5
Регистрация: 21.10.2010
Сообщений: 539
08.01.2012, 20:44     Дайте совет по оптимизации #7
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
#include "iostream"
 
using namespace std;
 
int main()
{
    bool arr[10][10];
    //Генерируем поле
    for (int a=0;a<10;a++)
        for (int b=0;b<10;b++)
        {
            if((a+b)%2==0)
                arr[a][b] = true;
            else
                arr[a][b] = false;
        }
 
    //Цикл обработки
    while(true)
    {
        cout << "Enter x and y of point to kill it or 0 to go away: ";
        int x,y;
        cin >> x;
        if(x==0)
            break;
        cin >> y;
        if(arr[x][y])
        {
            /*Можно добавить код на проверку соседних клеток на возможность ранения*/
            arr[x][y] = false;
            cout << "You kill me, baybe!" << endl;
        }
        else
        {
            cout << "You did not get!" << endl;
        }
    }
    system("pause");
    return 0;
}
Примерный код того что я говорю
dimcoder
Полярный
458 / 431 / 67
Регистрация: 11.09.2011
Сообщений: 1,129
08.01.2012, 20:47     Дайте совет по оптимизации #8
NoMasters, тогда и при операции (a+i) (из *(*(a+i)+j)), тоже происходит умножение на sizeof(type).
somebody11, код код код код код кодкодкодкодкокдокодкодокодкдокдокдокдодокдокд
somebody11
14 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 29
08.01.2012, 21:02  [ТС]     Дайте совет по оптимизации #9
Цитата Сообщение от dimcoder Посмотреть сообщение
тогда и при операции (a+i) (из *(*(a+i)+j)), тоже происходит умножение на sizeof(type).
даа, кстати, это был второй семестр, память меня подводит )
Цитата Сообщение от dimcoder Посмотреть сообщение
код код код код код кодкодкодкодкокдокодкодокодкдокдокдокдодокдокд
ну
он большой очень и разбит на несколько срр для удобства работы. впрочем, если пожелаете ознакомиться, можно выложить архивом куда-нибудь

вообще говоря, передо мной стоит задача его оптимизировать по быстродействию и размеру (ну это на второй план). поэтому если подскажете еще что, будет весьма неплохо
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,057
08.01.2012, 21:19     Дайте совет по оптимизации #10
ох уж эти оптимизаторы, оптимизирующие доступ к таблице на 100 элементов, у вас что компы Atari 8086?
лучше бы сделали код более менее читабельным да проверки на ввод данных отпользователя, к примеру так
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
int _tmain(int argc, _TCHAR* argv[])
{
        int x,y;
        bool area[10][10];
        for (int a=0;a<10;a++)
            for (int b=0;b<10;b++)
                area[a][b]=(a+b)%2; 
        do
        {
            do
            {
                cout << "Enter x and y of point to kill it: ";
                cin >> x >> y;
            }
            while ((x<1||x>10)||(y<1||y>10));            
            if(area[x][y])
            {
                area[x][y] = false;
                cout << "You kill me, baybe!" << endl;
            }
            else
            {
                cout << "You did not get!" << endl;
            }
            cout<<"Press Enter for continue"<<endl;
        }
        while (_getch()==13);
        system("pause");
        return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2012, 21:39     Дайте совет по оптимизации
Еще ссылки по теме:

Цветной рисунок в С++ консоль, Дайте совет!! - C++
Доброго времени суток! Я новичок в программировании, посему не обессудьте. Вопрос состоит в следующем, создается рисунок в данной...

Дайте совет, как разбить данную программу на функции? - C++
(в задании нужно было посчитать сумму ряда) #include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;iomanip&gt; #include &lt;locale&gt; ...

Чем занимаются программисты ? Что мне учить ? Дайте совет в обучении - C++
Чем занимаются программисты ? Что мне учить ? Дайте совет в обучении Вначале хотел бы описать свою ситуацию с обучением: Ушел...

CUDA: Как учитывать ограничение в памяти видухи? Дайте совет по идеологии вычислений! - C++
Вопрос 1: Опишу простую задачу и способ ее решения. Я мануал конечно читал, но мне нужен совет по реализации вычислений на CUDA....

Методы оптимизации - C++
Здравствуйте, прошу помочь,кто может написать программу для решения задачи используя 2 метода ?1)Метод золотого сечения 2)Метод...


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

Или воспользуйтесь поиском по форуму:
somebody11
14 / 0 / 0
Регистрация: 11.12.2011
Сообщений: 29
08.01.2012, 21:39  [ТС]     Дайте совет по оптимизации #11
Цитата Сообщение от агерон Посмотреть сообщение
ох уж эти оптимизаторы, оптимизирующие доступ к таблице на 100 элементов, у вас что компы Atari 8086?
дело в том, что алгоритмы расстановки и стрельбы сделаны вполне логично и аккуратно, есть все проверки и прочие мелочи, поэтому нужно за что-то зацепиться, чтобы выполнить поставленную задачу.

Добавлено через 12 минут
кстати говоря
непонятен случай
если мы когда-то подстрелили корабль (он 3х или 4х палубный)
затем опять в него попали - тогда наш алгоритм проверки на ранен-убит дает сбой
Yandex
Объявления
08.01.2012, 21:39     Дайте совет по оптимизации
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru