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

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

Войти
Регистрация
Восстановить пароль
 
DJZT
24 / 3 / 0
Регистрация: 21.12.2011
Сообщений: 151
#1

Динамический масив - C++

14.03.2012, 00:18. Просмотров 679. Ответов 10
Метки нет (Все метки)

Здравствуйте.
Задание
Переписать в динамический масив числа отрицательные не кратные 3м.
Проблема
Выводит мусор и и создаёт ненужное кол-во ячеек динам масива.

Скрин

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
#include <stdio.h>
#include "stdafx.h"
#include <conio.h>
#include <stdlib.h>
 
void main()
{
    int buf,I,z;
    int *a;
    int x[8];
    //int b[8]={0,0,0,0,0,0,0,0};
    
    printf("Programm 2\n");
    for(I=0;I<=7;I++) 
    {
        printf("Vvedite elementi masiva\n");
        scanf("%d",&x[I]);
    }
    buf=0;
    z=0;
    printf("Masiv x\n");
    for(I=0;I<=7;I++)
        printf("%d ",x[I]);
    printf("\nSozdanie novogo masiva\n");
    for(I=0;I<=7;I++)
    {
        if (x[I] < 0 && x[I] %3 != 0 ) 
        {
            buf=x[I];
            a = new int[z];
            a[z] = buf;
            z++;
            printf("%i ",buf);// показ чисел(проверочно)
            //-------------------
            //b[I] = buf;
 
        } 
    }
    printf("\n----------------------------------\n%i chisel\n",z); //проверка кол-ва чисел
    for(I=0; I<=7;I++)
    { 
        printf("%i ",a[I]);//вывод динамики
    }
    getch();
    system("cls");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2012, 00:18     Динамический масив
Посмотрите здесь:

масив C++
C++ Масив
масив C++
C++ масив
C++ Динамический масив
C++ Динамический масив
C++ Масив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.03.2012, 00:24     Динамический масив #2
в цикле постоянно выделяете память,
выделение памяти начинается с 0 ибо z = 0
DJZT
24 / 3 / 0
Регистрация: 21.12.2011
Сообщений: 151
14.03.2012, 00:30  [ТС]     Динамический масив #3
Цитата Сообщение от panicwassano Посмотреть сообщение
в цикле постоянно выделяете память,
выделение памяти начинается с 0 ибо z = 0
Ну да. А что тогда не правильно? откуда берутся лишние ячейки, если внутырь условия оно заходит к примеру один раз а ячеек становится больше?
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.03.2012, 00:31     Динамический масив #4
Цитата Сообщение от DJZT Посмотреть сообщение
Ну да. А что тогда не правильно? откуда берутся лишние ячейки, если внутырь условия оно заходит к примеру один раз а ячеек становится больше?
массив один? зачем вы память под него 10 раз выделяете? да еще и new int[0] что вам вернет угадайте?
DJZT
24 / 3 / 0
Регистрация: 21.12.2011
Сообщений: 151
14.03.2012, 00:37  [ТС]     Динамический масив #5
А почему "10" раз? Счётчик z увеличивается только тогда, когда условие истино. В моём случае по скрину, как я понимаю, должно было выделится только 3 ячейки. 0,1,2 - рас z с 0, то так? z больше нигде же не уведичивается

Добавлено через 2 минуты
а. int new[0] ничего не создаст получается? То есть счётчик надо начинать не с 0 а с 1?
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.03.2012, 00:39     Динамический масив #6
10 раз написано образно
new int [0] ничего не вернет
далее new int [1] выделится где то память
далее new int [2] выделится в другом месте память

далее выводите ту информацию, которая находится совершенно в другом месте и вам выдается мусор
выделите память под массив 1 раз, сколько надо, либо делайте realloc если не хватает

Добавлено через 59 секунд
DJZT вы вместо динамического массива, создаете несколько динамических массивов, причем память каждый раз теряется и вы ее не освобождаете
DJZT
24 / 3 / 0
Регистрация: 21.12.2011
Сообщений: 151
14.03.2012, 00:42  [ТС]     Динамический масив #7
а если вместо new int[z] писать new int[1] к примеру память будет выделяться в один масив? или что надо писать в скобках?
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.03.2012, 00:43     Динамический масив #8
Цитата Сообщение от DJZT Посмотреть сообщение
а если вместо new int[z] писать new int[1] к примеру память будет выделяться в один масив? или что надо писать в скобках?
выделение памяти нужно убрать из цикла, new int [1] выделит память под ОДИН элемент
в скобках нужно писать сколько вам нужно элементов, вам выделится непрерывный блок памяти, куда и запишите элементы свои.
Почитайте теорию, откройте книжку не ленитесь
DJZT
24 / 3 / 0
Регистрация: 21.12.2011
Сообщений: 151
14.03.2012, 00:43  [ТС]     Динамический масив #9
Цитата Сообщение от panicwassano Посмотреть сообщение
выделите память под массив 1 раз, сколько надо, либо делайте realloc если не хватает
и откуда я узнаю, скользо мне надо памяти выделить? Мне же недо как бы масив, который будет динамически расширяться по мере поступления нужных данных
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.03.2012, 00:44     Динамический масив #10
чтобы знать нужно наверно сосчитать количество искомых элементов и выделить под них память, либо
realloc, http://www.cplusplus.com/reference/c...tdlib/realloc/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2012, 00:44     Динамический масив
Еще ссылки по теме:

Динамический масив: записать в масив все делители числа n C++
C++ C++ Двухмерный динамический масив
C++ Масив на 18 действ. Упорядочить по возростанию масив
Матрица 5 на 5, динамический масив C++

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

Или воспользуйтесь поиском по форуму:
DJZT
24 / 3 / 0
Регистрация: 21.12.2011
Сообщений: 151
14.03.2012, 00:44  [ТС]     Динамический масив #11
Цитата Сообщение от panicwassano Посмотреть сообщение
выделение памяти нужно убрать из цикла, new int [1] выделит память под ОДИН элемент
в скобках нужно писать сколько вам нужно элементов, вам выделится непрерывный блок памяти, куда и запишите элементы свои.
Почитайте теорию, откройте книжку не ленитесь
с таким же успехом я могу создать обычный масив int b[8] и всё, но у меня будут лишние ячейки, которые мне не нужны
Yandex
Объявления
14.03.2012, 00:44     Динамический масив
Ответ Создать тему
Опции темы

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