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

Задача с массивом - C++

Восстановить пароль Регистрация
 
_RoleX_
 Аватар для _RoleX_
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 12
31.03.2014, 16:05     Задача с массивом #1
Дана такая задача :

[cut]
Все правильно показывает до 6-й степени двойки, а дальше не правильные степени.. в чем ошибка?
Выполнил ее вот так :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
 
int main(int argc, char* argv[])
{
        setlocale(LC_ALL, "Russian");
        int pt;
        int x[pt];
        cout << "Ââåäèòå Г±ГІГҐГЇГҐГ*Гј 2-ГЄГЁ: \n"; cin >> pt;
        for(int i = 0; i <=pt; i++)
        {
        x[i] = pow(2,i);
        }
        for(int i = 0; i <=pt; i++)
        {
        cout << "2 Гў " << "Г±ГІГҐГЇГҐГ*ГЁ " <<  i << " = " << x[i] << '\n' ;
        }
        
        system("PAUSE >> NULL");
        return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 16:05     Задача с массивом
Посмотрите здесь:

C++ Задача с массивом.
C++ Задача с массивом
C++ Задача с массивом
C++ C++ задача с массивом
Задача с массивом. Создать. Заполнить (Рандомно). Сделать инверсию! C++
Задача с массивом C++
Задача с массивом (найти максимальный парный элемент в каждой строке массива) C++
C++ Задача с массивом, нужно найти сумму элементов которые находятся перед последним отрицательным элементом
C++ задача с 2х мерным массивом
C++ Массивом и динамическим массивом
C++ Задача с указателем-массивом
Задача на функцию с массивом, пишет ошибку C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
31.03.2014, 16:10     Задача с массивом #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    int pt;
 
    cout << "Введите степень 2-ки: \n"; 
    cin >> pt;
        int *x = new int[pt];
    for(int i = 0; i <=pt; i++)
    {
        x[i] = pow(2.0,i);
    }
    for(int i = 0; i <=pt; i++)
    {
        cout << "2 в " << "степени " <<  i << " = " << x[i] << '\n' ;
    }
 
    system("PAUSE >> NULL");
    return 0;
}
enyx
 Аватар для enyx
7 / 7 / 2
Регистрация: 03.07.2013
Сообщений: 42
31.03.2014, 16:16     Задача с массивом #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <time.h>
#include <math.h>
#include <stdlib.h>
using namespace std;
 
int main()
{
    int p;
    int a[p];
    cin>>p;
    for(int i=0; i<=p;i++)
    {
        a[i] = pow(2,i);
    }
    for(int i=0;i<=p;i++)
    {
        cout<<a[i]<<endl;
    }
    return 0;
}
у меня нормально работает
вот output
william@neptun:~/work/c_plus/cyber_forum$ ./a.out
8
1
2
4
8
16
32
64
128
256
_RoleX_
 Аватар для _RoleX_
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 12
31.03.2014, 16:18  [ТС]     Задача с массивом #4
Я новичок в программирование, можешь объяснить что ты сделал этой строчкой?
Цитата Сообщение от Wlk Посмотреть сообщение
int *x = new int[pt];
Не могу разобрать эти указатели, зачем они служат вообще?
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
31.03.2014, 16:24     Задача с массивом #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Размер статического массива должен быть известен уже на этапе компиляции. У вас же получается

C++
1
2
 int pt;
        int x[pt];
Вы создаете массив еще не зная его размера.
По этому тут выход - создание динамического массива. А синтаксис его определения таков:

ТИП имя_указателя_на_первый_элемент_массива = new ТИП[размерность].

К сожалению, а может к счастью динамические массивы создаются оператором new только через указатель на элемент массива.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
31.03.2014, 16:39     Задача с массивом #6
Цитата Сообщение от _RoleX_ Посмотреть сообщение
Не могу разобрать эти указатели, зачем они служат вообще?
Это выделение памяти под динамический массив (используются в тех случаях если размер его заранее не известен, или он больше чем помещается в стек). Но Wlk забыл про очистку выделенной памяти (хотя в данном конкретном случае не крамольно, но приучаться сразу надо делать нормально).
И Вы все постарались решить задачу в лоб (не рационально). Зачем:
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
include <iostream>
#include <cstdlib>
using namespace std;
 
int main(int argc, char* argv[])
{
        setlocale(LC_ALL, "Russian");
        int pt;
        cout << "Введите степень 2-ки: \n"; cin >> pt;
        if (pt<1)
        {cout << "2 в " << "степени 0 = 1" << '\n' ;
        system("PAUSE");
        return 0;
        }
        int *x=new int[pt+1];
        x[0]=1;
        x[1]=2;
        for(int i = 2; i <=pt; i++)
        {
        x[i] =x[i-1]*2;
        }
        for(int i = 0; i <=pt; i++)
        {
        cout << "2 в " << "степени " <<  i << " = " << x[i] << '\n' ;
        }
        delete [] x;
        system("PAUSE");
        return 0;
}
Добавлено через 5 минут
Опечатка должно быть так конечно же:
C++
1
#include <iostream>
Yandex
Объявления
31.03.2014, 16:39     Задача с массивом
Ответ Создать тему
Опции темы

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