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

Массив - C++

Восстановить пароль Регистрация
 
 
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
14.10.2011, 12:56     Массив #1
помогите правильно заполнить массив чтобы элементы строки можно было вводить через пробел

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int n;
printf("Введите количество вершин:"); \\ массив будет в виде квадратной матрицы
int graf[n][n];
printf("Введите элементы в виде матрицы ребер графа, 1 - если есть ребро 0 - если ребра нет:"); \\задача  на графы
for(int i=0, i<n, ++i)
    for(int j=0, j<n, ++j)
    {
        scanf("%i", &graf[i][j]);
    }
for(int i=0, i<n, ++i)
    for(int j=0, j<n, ++j)
    {
        printf("%i", &graf[i][j]);
        printf("\n");
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2011, 12:56     Массив
Посмотрите здесь:

C++ Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W
C++ задача записать в массив отрицательные элементы матрицы в массив и вывести их
Дан массив А(4,4). Сформировать массив В(4) из среднеарифметических значений элементов в каждой строке. C++
Массив: Составить массив из двух исходных по заданному принципу заполнения C++
C++ Массив: Переместить в массив Y все числа, дробная часть которых больше 5.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.10.2011, 12:59     Массив #2
Это для вывода
C
1
2
3
4
5
6
for(int i=0, i<n, ++i)
{   
   for(int j=0, j<n, ++j)
      printf("%d ", graf[i][j]);
   printf("\n");
}
Для ввода
C
1
2
3
for(int i=0, i<n, ++i)
   for(int j=0, j<n, ++j)
      scanf("%d", &graf[i][j]);
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
14.10.2011, 13:13  [ТС]     Массив #3
хм...а почему стоит %d у меня ведь массив описан как int
garkeP91
49 / 49 / 5
Регистрация: 24.10.2010
Сообщений: 131
14.10.2011, 13:21     Массив #4
В вашем случае между %i и %d нет особой разницы. Просто в основном для целых (Как у вас) пишут &d везде, по умолчанию ))
Вот в чем разница:
%d Ожидается ввод целого числа, аргумент -указатель должен быть указателем на int.
%i Ожидается ввод целого числа. Если число начинается с 0, оно воспринимается как восьмеричное. Если число начинается с 0x или 0X, оно шестнадцатиричное. Аргумент должен быть указателем на int.
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
14.10.2011, 13:29  [ТС]     Массив #5
понятно сейчас попробую
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
15.10.2011, 21:06  [ТС]     Массив #6
что то ошибка...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int _tmain(int argc, _TCHAR* argv[])
{
int n;
printf("Введите количество вершин:\n");
scanf("%i",n);
int a[n][n];
printf("Введите элементы в виде матрицы ребер графа, 1 - если есть ребро 0 - если ребра нет:");
 
for(int i=0, i<n, ++i)
   for(int j=0, j<n, ++j)
      scanf("%d", &a[i][j]);
 
for(int i=0, i<n, ++i)
{   
   for(int j=0, j<n, ++j)
      printf("%d ", a[i][j]);
   printf("\n");
}
return 0;
}
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
15.10.2011, 21:10     Массив #7
bootleanC, какая ошибка?

Не по теме:

Вы думаете, мы телепатически должны угадать, что именно не работает? Неужели так сложно указать источник ошибки - компилятор ругается на строку такую-то с сообщением таким-то или выводит не то, что нужно, и т.п.

Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2011, 21:13     Массив #8
Конечно, ошибка, а кто массив двумерный будет правильно задавать?

Цитата Сообщение от bootleanC Посмотреть сообщение
C++
1
2
3
4
int n;
printf("Введите количество вершин:\n");
scanf("%i",n);
int a[n][n];
Это неверно
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
15.10.2011, 21:18  [ТС]     Массив #9
компилятор ругается что типо нельзя создать нулевой массив...получаеться нельзя создать массив заранее не определив его размерность???
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2011, 21:19     Массив #10
Цитата Сообщение от bootleanC Посмотреть сообщение
компилятор ругается что типо нельзя создать нулевой массив...получаеться нельзя создать массив заранее не определив его размерность???
Конечно. либо int **a - динамический двумерный массив, либо int a[100][200], например
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
15.10.2011, 21:21  [ТС]     Массив #11
а в чем отличие динамического массива от простого? я с ним смогу работать так же как и с простым???
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
15.10.2011, 21:24     Массив #12
да. после того, как выделите под него память, вся работа будет как с обычным массивом. нужно просто в конце, когда он вам уже не нужен, не забыть освободить эту память
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
15.10.2011, 21:27  [ТС]     Массив #13
получаеться как то так???
C++
1
int** a= new[n][n];
Добавлено через 1 минуту
aeshes, скажи как освободить эту память...на будующее
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
15.10.2011, 21:29     Массив #14
C++
1
2
3
4
5
6
7
8
9
10
//ввод n
//выделение памяти
int **x=new int*[n];
for(int i=0;i<n;i++)
   x[i]=new int[n];
 
//освобождение
for(int i=0;i<n;i++)
  delete [] x[i];
delete []x;
Но это в С++, а вы пишете на С, судя по используемым printf и scanf (или на каком-то гибриде из них?). В С вам подойдут функции malloc и calloc для выделения и функция free для освобождения
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2011, 21:30     Массив #15
Цитата Сообщение от bootleanC Посмотреть сообщение
получаеться как то так???
C++
1
int** a= new[n][n];
не-не-не, более хитро. сначала создается массив указателей, а потом одномерные массивы. Лучше пока со статическим работайте.
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
15.10.2011, 21:36  [ТС]     Массив #16
то есть создать так просто двумерный динамически массив не получиться???

Добавлено через 52 секунды
aeshes, нет пишу на С++, а разве не используют для ввода информации scanf, а для вывода printf???
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2011, 21:37     Массив #17
Цитата Сообщение от bootleanC Посмотреть сообщение
то есть создать так просто двумерный динамически массив не получиться???
aeshes вам любезно показала как это делается
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
15.10.2011, 21:37     Массив #18
printf, scanf - это функции из С, а в С++ для ввода/вывода используются потоки cin и cout из библиотеки iostream
C++
1
2
3
int a;
cin>>a; //ввести значение а
cout<<"You entered: "<<a; //вывести текст и значение а

Не по теме:

P.S. Похоже, ваш преподаватель тоже не различает С и С++

Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.10.2011, 21:40     Массив #19
Цитата Сообщение от aeshes Посмотреть сообщение

Не по теме:

P.S. Похоже, ваш преподаватель тоже не различает С и С++

Не по теме:

Да уж, aeshes, ужас полный

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 21:49     Массив
Еще ссылки по теме:

Массивы и указатели (нужно передать массив I[10] в массив J[10] в обратной последовательности) C++
C++ Дан массив. Записать во второй массив все элементы, не совпадающие с минимальным
Сжать массив, выбросив из него отрицательные элементы - массив становится пустым C++

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

Или воспользуйтесь поиском по форуму:
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
15.10.2011, 21:49  [ТС]     Массив #20
что то я все равно не въезжаю((
C++
1
2
3
4
5
6
7
int n;
printf("Введите количество вершин:\n");
scanf("%i",&n);
int **a=new int*[n];
for(int i=0;i<n;i++)6
   a[i]=new int[n];
int a[n][n];
Добавлено через 2 минуты
я канеш понимаю что туплю и мало знаю...но блин если не сложно исправьте код как должно быть...буду очень благодарен))
Yandex
Объявления
15.10.2011, 21:49     Массив
Ответ Создать тему
Опции темы

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