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

Составить матрицу из массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
coba1n
 Аватар для coba1n
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 12
19.11.2009, 13:55     Составить матрицу из массива #1
Доброе время суток.
К примеру есть массив a[3]={1,2,3}.
Необходимо построить квадратную матрицу вида:
1 2 3
1 4 9
1 8 27
..........
1^n 2^n 3^n

Спасибо за внимание.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2009, 13:55     Составить матрицу из массива
Посмотрите здесь:

C++ КАК СОСТАВИТЬ МАТРИЦУ, СИММЕТРИЧНУЮ ДАННОЙ!!!
C++ СРОЧНО!!! Составить Матрицу!(ТОлько СИ, не СИ++)
Составить матрицу из вектора C++
Составить программу, которая заполняет квадратную матрицу C++
Составить программу, которая образует матрицу (n × n) C++
C++ составить рандомную матрицу
C++ Помогите, пожалуйста, составить матрицу инцедентности
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.11.2009, 14:25     Составить матрицу из массива #2
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
#include <conio.h>
#include <math.h>
#include <iostream.h>
int main()
{
    int n, i, j, *mas1, **mas2;
cout<<"n= ";
cin>>n;
mas1=new int[n];
for(i=0; i<n; i++)
{
    cout<<"["<<i<<"]= ";
    cin>>mas1[i];
}
 mas2=new int*[n];
 for(i=0; i<n; i++)
    mas2[i]=new int[n];
 for(i=0; i<n; i++)
     for(j=0; j<n; j++)
         mas2[i][j]=(int)pow(j+1, i+1);
     cout<<"Itog: "<<endl;
 for(i=0; i<n; i++)
 {
     for(j=0; j<n; j++)
     {
         cout.width(5);
         cout<<mas2[i][j];
     }
     cout<<endl;
 }  
getch();
return 0;
}
coba1n
 Аватар для coba1n
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 12
19.11.2009, 20:01  [ТС]     Составить матрицу из массива #3
спасибо огромное.попробую перевести в С
coba1n
 Аватар для coba1n
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 12
25.11.2009, 20:49  [ТС]     Составить матрицу из массива #4
valeriikozlov,
не могли бы Вы, пожалуйста, объяснить строки 15,17,20,26
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.11.2009, 00:57     Составить матрицу из массива #5
mas2=new int*[n]; - выделение памяти динамически под массив указателей на переменные типа int, размером n, и присвоение адреса этой памяти указателю mas2.
mas2[i]=new int[n]; - выделение памяти динамически под массив для переменных типа int, размером n, и присвоение адреса этой памяти указателю mas2[i].
Вообще строки 15-17 динамически выделяют память под двумерный массив (размером n*n), для хранения переменных типа int.
Для С аналог 15-17 строк будет выглядеть так:
C
1
2
3
  mas2 = (int **)malloc (n * sizeof (int *));
  for (i = 0; i < n; i++)
  mas2 [i] = (int *)malloc (n * sizeof (int));
но не забудьте подключить: #include <stdlib.h>

mas2[i][j]=(int)pow(j+1, i+1); - элементу массива mas2 (который расположен в строке i и столбце j) присваиваем значение, которое получится если j+1 возведем в степень i+1. Т.е. например элементу массива во второй строке и третьем столбце присвоим значение = 4 в степени 3.

cout.width(5); - при выводе на экран значений делаем между ними отступ на 5. Аналог в С: printf("%5d", mas2[i][j]); - в этой функции выделяем 5 знакомест под вывод на экран каждого элемента mas2[i][j].
coba1n
 Аватар для coba1n
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 12
26.11.2009, 22:25  [ТС]     Составить матрицу из массива #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
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <alloc.h>
#include <math.h>
main()
 {
   int n, i, j, *mas1, **mas2;
    scanf ("%d", &n);
     mas1=(int*)malloc(n*sizeof(int));
      for (i=0;i<n;i++)
 
   {
 
     scanf ("%d", &mas1[i]);
      printf (" %d ", mas1[i]);
 
    }
           mas2=(int**)malloc(n*sizeof(int*));
         for (i=0;i<n;i++)
              mas2[i]=(int*)malloc(n*sizeof(int));
           for (i=0;i<n;i++)
                   for (j=0;j<n;j++)
              mas2[i][j]=(int)pow(i+1, j+1);
     for (i=0;i<n;i++)
 
   {
 
     printf ("\n");
      for (j=0;j<n;j++)
        printf (" %d ", mas2[i][j]);
   }
     getch();
    return(0);
 }

описываю действия:
я ввожу 4,жму Enter,ввожу 1 2 3 4,жму Enter.программа выдает квадратную матрицу.всё правильно.
но если я ввожу не 1 2 3 4,а например 2 2 2 2,то она выводит ту же матрицу,что и в первом случае,а должна выводить:
2 2 2 2
4 4 4 4
16 16 16 16 и т.д.
так же нет никакой реакции на отрицательный числа.
объясните, пожалуйста,в чем проблема.
___________________________________________
a1 a2 a3
a1^2 a2^2 a3^2
a1^3 a2^3 a3^3
.......................
a1^n a2^n a3^n

спасибо.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.11.2009, 23:21     Составить матрицу из массива #7
coba1n, В общем так - если Вам нужно самому вводить первую строчку массива, то испрользуйте вот этот код:
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
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
main()
{
int n, i, j, *mas1, **mas2;
printf("n= ");
scanf ("%d", &n);
mas1=(int*)malloc(n*sizeof(int));
for (i=0;i<n;i++)
{
printf ("[%d]= ", i);
scanf ("%d", &mas1[i]);
}
mas2=(int**)malloc(n*sizeof(int*));
for (i=0;i<n;i++)
mas2[i]=(int*)malloc(n*sizeof(int));
for (i=0;i<n;i++)
    for (j=0;j<n;j++)
        mas2[i][j]=(int)pow(mas1[j], i+1);
for (i=0;i<n;i++)
 
{
 
printf ("\n");
for (j=0;j<n;j++)
printf (" %5d ", mas2[i][j]);
}
getch();
return(0);
}
если нужно только вводить размерность массива, а первая строка всегда имеет такой вид: 1 2 3 ... n, то такой код:
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
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
main()
{
int n, i, j, *mas1, **mas2;
printf("n= ");
scanf ("%d", &n);
mas1=(int*)malloc(n*sizeof(int));
for (i=0;i<n;i++)
mas1[i]=i+1;
mas2=(int**)malloc(n*sizeof(int*));
for (i=0;i<n;i++)
mas2[i]=(int*)malloc(n*sizeof(int));
for (i=0;i<n;i++)
    for (j=0;j<n;j++)
        mas2[i][j]=(int)pow(mas1[j], i+1);
for (i=0;i<n;i++)
 
{
 
printf ("\n");
for (j=0;j<n;j++)
printf (" %5d ", mas2[i][j]);
}
getch();
return(0);
}
coba1n
 Аватар для coba1n
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 12
06.12.2009, 18:32  [ТС]     Составить матрицу из массива #8
как оказалось, работа должна выполняться в функции,но почему-то не работает.в cod.t содержится: 5 1 2 -1 -2 0;где 5-n.
вот код:
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
#include <stdio.h>
#include <math.h>
#include <alloc.h>
main()
{
 int n, i, j, *mas1, **mas2;
 FILE *in;
 if (( in = fopen("cod.t","r"))==NULL) {
  printf (" Not found"); exit (1); }
 fscanf (in,"%d", &n); clrscr();
   mas1=(int*)malloc(n*sizeof(int));
    for (i=0;i<n;i++)
     fscanf (in,"%d", &mas1[i]);
     for (i=0;i<n;i++)
      printf (" %d ", mas1[i]);
 
 
 
     mas2=(int**)malloc(n*sizeof(int*));
       for (i=0;i<n;i++)
          mas2[i]=(int*)malloc(n*sizeof(int));
 
 
      MATRIX(&mas1,&n,mas2);
      for (i=0;i<n;i++)
      {
      printf ("\n");
      for (j=0;j<n;j++)
      printf(" %3d ",mas2[i][j]);
       }
}
     MATRIX(int **mas2,int *mas1,int *n)
     {int i,j;
     for (i=0;i<*n;i++)
     for (j=0;j<*n;j++)
         mas2[i][j]=(int)pow(mas1[j],i+1);
     }
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.12.2009, 22:00     Составить матрицу из массива #9
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
#include <stdlib.h>   
#include <stdio.h>
#include <malloc.h>
#include <math.h>
 
void MATRIX(int **mas2,int *mas1,int n)
{int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
mas2[i][j]=(int)pow(mas1[j],i+1);
}
FILE *in;
int main()
{
int n, i, j, *mas1, **mas2;
 
if (( in = fopen("cod.t","r"))==NULL) {
printf (" Not found"); exit (1); }
fscanf (in,"%d", &n); //clrscr();
mas1=(int*)malloc(n*sizeof(int));
for (i=0;i<n;i++)
fscanf (in,"%d", &mas1[i]);
for (i=0;i<n;i++)
printf (" %3d ", mas1[i]);
 
 
 
mas2=(int**)malloc(n*sizeof(int*));
for (i=0;i<n;i++)
mas2[i]=(int*)malloc(n*sizeof(int));
 
 
MATRIX(mas2, mas1,n);
for (i=0;i<n;i++)
{
printf ("\n");
for (j=0;j<n;j++)
printf(" %3d ",mas2[i][j]);
}
printf ("\n");
return 0;
}
coba1n
 Аватар для coba1n
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 12
13.12.2009, 16:25  [ТС]     Составить матрицу из массива #10
valeriikozlov,
преподаватель просит заменить возведение в степень на умножение. совершенно не представляю как сделать это.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.12.2009, 17:29     Составить матрицу из массива #11
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 <stdlib.h>   
#include <stdio.h>
#include <malloc.h>
//#include <math.h>
 
void MATRIX(int **mas2,int *mas1,int n)
{int i,j,l;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
    mas2[i][j]=1;
    for(l=0;l<=i+1;l++)
mas2[i][j]*=mas1[j];
}
}
FILE *in;
int main()
{
int n, i, j, *mas1, **mas2;
 
if (( in = fopen("cod.t","r"))==NULL) {
printf (" Not found"); exit (1); }
fscanf (in,"%d", &n); //clrscr();
mas1=(int*)malloc(n*sizeof(int));
for (i=0;i<n;i++)
fscanf (in,"%d", &mas1[i]);
for (i=0;i<n;i++)
printf (" %3d ", mas1[i]);
 
 
 
mas2=(int**)malloc(n*sizeof(int*));
for (i=0;i<n;i++)
mas2[i]=(int*)malloc(n*sizeof(int));
 
 
MATRIX(mas2, mas1,n);
for (i=0;i<n;i++)
{
printf ("\n");
for (j=0;j<n;j++)
printf(" %3d ",mas2[i][j]);
}
printf ("\n");
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2009, 17:49     Составить матрицу из массива
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
coba1n
 Аватар для coba1n
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 12
13.12.2009, 17:49  [ТС]     Составить матрицу из массива #12
блиииин) я думал о новом счетчике,но не смог реализовать.вышло вот так:
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
47
48
49
50
#include <stdio.h>
#include <alloc.h>
 
MATRIX(int **mas2,int *mas1,int n)
{int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++){
mas2[i][j]=mas1[i];break; }
for (i=0;i<n;i++)
for (j=1;j<n;j++){
mas2[i][j]=mas1[i]*mas1[i]; break; }
for (i=0;i<n;i++)
for (j=2;j<n;j++){
mas2[i][j]=mas1[i]*mas1[i]*mas1[i];break; }
for (i=0;i<n;i++)
for (j=3;j<n;j++){
mas2[i][j]=mas1[i]*mas1[i]*mas1[i]*mas1[i];break; }
for (i=0;i<n;i++)
for (j=4;j<n;j++){
mas2[i][j]=mas1[i]*mas1[i]*mas1[i]*mas1[i]*mas1[i];break; }
}
 
FILE *in;
main()
{
int n, i, j, *mas1, **mas2;
 
if (( in = fopen("cod.t","r"))==NULL) {
printf (" Not found"); exit (1); }
fscanf (in,"%d", &n); clrscr();
mas1=(int*)malloc(n*sizeof(int));
for (i=0;i<n;i++)
fscanf (in,"%d", &mas1[i]);
printf("Massiv");
for (i=0;i<n;i++)
printf (" %3d ", mas1[i]);
 
 
mas2=(int**)malloc(n*sizeof(int*));
for (i=0;i<n;i++)
mas2[i]=(int*)malloc(n*sizeof(int));
 
MATRIX(mas2, mas1,n);
for (i=0;i<n;i++)
{
printf ("\n");
for (j=0;j<n;j++)
printf(" %3d ",mas2[j][i]);
}
}
но ваше намнооооого короче) спасибо.
Yandex
Объявления
13.12.2009, 17:49     Составить матрицу из массива
Ответ Создать тему
Опции темы

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