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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2013, 02:20   #1
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию Указатель на массив указателей

Код:
#include <iostream>
#include <stdlib.h>
#include <conio.h>

using namespace std;

void output(int **a, int number_mas);

int main()
{
    int n_mas;
    int number_element;

    cout << "Number of mass = ";
    cin >> n_mas;
    int **a =new int *[n_mas];
    for (int i=0; i<n_mas; i++)
    {
        cout << "Number of element array [" << i+1 << "] = ";
        cin >> number_element;
        a[i] = new int [number_element];
        a[i][0] = number_element;
        for (int j=1; j<=number_element; j++)
        {
            cout << "Element [" << j << "] = ";
            cin >> a[i][j];
        }

    }

    output(a,n_mas);

	getch();





    return 0;
}

void output(int **a, int number_mas)
{
    int *p;

    for (int i=0; i<number_mas; i++)
    {
        p = a[i];
        for (int j=0; j<(*p); j++)
        {
            cout << *p << '\t';
            p++;
        }
        cout <<'\n';




    }

}
Нужно создать n массивов. Каждый массив имеет разное количество елементов. Пользователь вводит его для каждого масива, ето число и будет первым елементом массива.
После етого нужно вывести все массивы.
Не пойму где здесь ошибка. Не всегда работает верно. Иногда выводит мусор, иногда не все елменты.
Помогите исправить)
Pein95 вне форума Ответить с цитированием
Старый 24.01.2013, 02:26   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а количество элементов в каждом под массиве сохранить тоже надо)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.01.2013, 02:27   #3
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

количество елементов - ето первый елемент каждого массива.
Pein95 вне форума Ответить с цитированием
Старый 26.01.2013, 03:17   #4
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

Ещо есть какие нибудь идеи?)
Pein95 вне форума Ответить с цитированием
Старый 26.01.2013, 04:12   #5
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Ещо есть какие нибудь идеи?)
Есть. ООП. Создайте объект "массив", а потом создайте "массив массивов".
А ошибка у Вас в том, что вы создаете, скажем, десять элементов, а обращаетесь к одинадцати.
Код:
        a[i] = new int [number_element];
        a[i][0] = number_element;
        for (int j=1; j<=number_element; j++)

PS. Что за удовольствие работать с такими типами:
int ********a =new int *******[n_mas];
садо-мазо

Последний раз редактировалось EUGY; 26.01.2013 в 04:20.
EUGY вне форума Ответить с цитированием
Старый 26.01.2013, 05:18   #6
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

удовольствия никакого. Просто дали задание такое)
Код:
#include <iostream>
#include <stdlib.h>

using namespace std;

void output(int **a, int number_mas);

int main()
{
    int n_mas;
    int number_element;

    cout << "Number of mass = ";
    cin >> n_mas;
    int **a =new int *[n_mas];
    for (int i=0; i<n_mas; i++)
    {
        cout << "Number of element array [" << i+1 << "] = ";
        cin >> number_element;
        a[i] = new int [number_element];
        a[i][0] = number_element;
        for (int j=1; j<number_element; j++)
        {
            cout << "Element [" << j << "] = ";
            cin >> a[i][j];
        }

    }

    output(a,n_mas);





    return 0;
}

void output(int **a, int number_mas)
{
    int *p;

    for (int i=0; i<number_mas; i++)
    {
        p = a[i];
        for (int j=0; j<(*p); j++)
        {
            cout << *p << '\t';
            p++;
        }
        cout <<'\n';




    }

}
такой код тоже не работает

Последний раз редактировалось Pein95; 26.01.2013 в 05:23.
Pein95 вне форума Ответить с цитированием
Старый 26.01.2013, 13:23   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
// ff.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "windows.h"

int* adda(int n){
	int *a=new int[n+2];
	for(int i=1;i<=n;i++) {a[i]=rand()%10;printf("%5d",a[i]);}printf("\n");
	a[0]=n;
	return a;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int n=5;
	int **a=new int*[n];
	for(int i=0;i<n;i++){
		int k=0;
		printf("Length please...");
		scanf("%d",&k);
		a[i]=adda(k);
	}

	for(int i=1;i<n;i++){
		for(int k=1;k<=a[i][0];k++) printf("%5d",a[i][k]);printf("\n");
	}
	system("pause");
	
	return 0;
}
Подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.01.2013, 17:27   #8
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

вполне) спасибо) но если не сложно можете обяснить почему здесь
Код:
int *a=new int[n+2];
Разве не будет работать просто если написать int *a = new int[n]?
Pein95 вне форума Ответить с цитированием
Старый 26.01.2013, 17:39   #9
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Код:
new type[count]
так вы потеряете 2 элемента.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 26.01.2013, 17:51   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если не сложно можете обяснить
Первый элемент для размера, а второй... на брудершвах
Вообще наверно стоит так:
Код:
	int *a=new int[n+1];
	for(int i=1;i<n;i++) {a[i]=rand()%10;printf("%5d",a[i]);}printf("\n");
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив указателей CaXaH Общие вопросы C/C++ 11 25.09.2012 12:06
Список указателей(TList). Как 100%-о вернуть не nil, указатель. Человек_Борща Общие вопросы Delphi 16 12.01.2012 11:56
Массив указателей nattaella Компоненты Delphi 2 11.06.2011 16:40
Указатель на массив указателей на массив char'ов... SrgGld Общие вопросы C/C++ 0 19.11.2010 23:35
Указатель на массив указателей, и т.д. Bernarditto Общие вопросы C/C++ 1 09.07.2010 12:26