Массив

  • Автор темы RayPeace
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

RayPeace

#1
Прошу помощи в решении данной задачи:
Из массива а(50,50) в массив d(2500) переписать все элементы массива а, модуль которых меньше 1. Результат вывести на экран.
заранее благодарю за помощь.

исправьте пожалуйста что не так...


C++:
 #include<stdio.h>
#include <math.h>
#include <conio.h>
void main()
{
float a[50][50], d[2500];
int i, j, k;
for (i=0; i<50; i++)
for (j=0; j<50; j++)
if (abs(a[i][j])<1)
{
d[j+50*i]=a[i][j];
}
d[j+50*i]=d[k];
printf( "%g", d[k]);

getch(); 
}
 
W

Whatka

#2
ты же нигде не заполняешь массив указателей a!

вот мой вариант
C++:
//
#include <iostream>
using namespace std;
void main()
{
float a[50][50], d[2500];
for (int k=0,i=0; i<50; i++)
for (int j=0; j<50; j++)
{
float num=rand()%100;//вот получение случайной
num/=100;				 //дробной части числа
a[i][j]=num+rand()%3;//сами случайные числа-элементы массива a,исправь если надо другие значения
if(abs(a[i][j])<1)
{
d[k]=a[i][j];
cout<<d[k]<<" ";
k++;
}
}
}
//
 
R

RayPeace

#3
Whatka
спасибо вам большое, жаль не могу поставить плюса в репутацию.
можно еще вопрос, не могли бы посмотреть блок схему алгоритм к этой программе, подправить что не так...
 
R

rrrFer

#4
стрелки ставятся только снизу вверх и справа налево.
С циклами явно что-то не так нарисовал, у блока цикла должно быть 2 выхода - когда условие цикла истинно, и когда ложно(у вас только 1 выход).
Не понятно что выполняет блок num/100. Возможно угадаю, вы хотели написать "num := num / 100", а может я и неправ. В других блоках такая же лабуда.

Да и вцелом, мне что-то не нравится.

Для построение блок-схемы есть специальные программы, рисовать в paint не обязательно )
 
W

Whatka

#5
честно говоря блок схемы не так пишутся
во первых k=0 перед циклом
во вторых в блок схеме не надо писать заполнение матрицы случайными числами
и мне кажется в блок схемах
у if - надо 2 ветвления
а операторы цикла не пишутся
 
W

Whatka

#7
например
a=0;
for(i=0;i<n;i++)
a++
как я знаю заменяются
на :huh: чтобы схему тут не рисовать
C++:
//
i=0;
a=0;
metka:
if(i<n)
{
i++;
a++;
goto metka;
}
else
{....}
//
ну я думаю ты понял
 
R

rrrFer

#8
Я понял )
Глянь в ГОСТах блок "подготовка", его используют для отображения циклов (и именное его пытался использовать ТС).
В другом ГОСТе(вроде бы более новом) найдешь блоки "начало цикла" и "конец цикла"
 
R

RayPeace

#9
подправил блок схему, посмотрите пожалуйста, что еще не правильно.
 
R

rrrFer

#10
Я уже писал:
С циклами явно что-то не так нарисовал, у блока цикла должно быть 2 выхода - когда условие цикла истинно, и когда ложно(у вас только 1 выход).
Блок "терминатор" выглядит как прямоугольник со скругленными краями, а не как овал.
Что делает блок К+1 не понятно. У операции "+" нет побочного эффекта...подозреваю, что надо написать К:=К+1
 
R

RayPeace

#13
Снова здравствуйте!
мне необходимо переделать эту же программу но с использованием 3 функций, а конкретнее это функции:
1) ввод массива а
2) формирование массива d
3) вывод d
я переделал с использованием функции ввода массива а и вывода d, не знаю как написать функцию формирования массива d, помогите пожалуйста.
мой код этой программы с использованием 2 функций

C++:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h
void input(float a[][50], int n, int m)//функция ввода массива а
{ int i, j;
for ( i=0; i<n; i++)
for (int j=0; j<m; j++ )
{
float num=rand()%100;
num/=100;
a[i][j]=num+rand()%1;
}
}


void out( float b[2500], int n )//функция вывода массива d
{ int i, j;
for (i=0; i<n; i++)
printf (" b(%d)=%g\n ",i , b[i]);
}


void main(void)
{ int n, m, i, j;
float a[50][50], b[2500];
input(a, n, m);
for( i=0; i<n; i++)
for( j=0; j<m; j++)
if(abs(a[i][j])<1)
{
b[i]=a[i][j];
out(b, n);
}
getch();

}
 
R

RayPeace

#14
подскажите пожалуйста как сделать функцию формирования массива b, и как из функции массив передавать?
 
R

RayPeace

#16
C++:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
void input(float a[50][50], int n, int m)//функция ввода массива а
{ int i, j;
for ( i=0; i<n; i++)
for (int j=0; j<m; j++ )
{printf ("vvedite znachenie a(%d,%d)= ",i , j);
scanf("%g", &a[i][j]);
} }


void out( float b[2500], int n )//функция вывода массива d
{ int i;
for (i=0; i<n; i++)
printf (" b(%d)=%g\n ",i , b[i]);
}


int mod(int a[][50], b[2500])//функция формирования массива d
{ int n, m, i, j, k=0;
for( i=0; i<n; i++)
for( j=0; j<m; j++)
if(abs(a[i][j])<1)
{
b[k]=a[i][j];
k++;
}	 return k;
}

void main(void)
{ int n, m, i, j, k;
float a[50][50], b[2500];

printf("vvedite kolo stolb m=");
scanf("%d", &m);
printf("vvedite kolo strok n=");
scanf("%d", &n);
input(a, n, m);
k=mod(a, b);
out(b,k);
getch();
}
}
посмотрите пожалуйста, не могу понять что не так, не запускается прога, выдает ошибку:
E2303 Type name expected
E2190 unexpected }
и не могли бы проверить правильно ли сделал функции. Заранее большое спасибо.
 
W

Whatka

#17
C++:
//
#include <conio.h>
#include <iostream>
using namespace std;
void input(float a[50][50], int n, int m)//функция ввода массива а
{ int i, j;
for ( i=0; i<n; i++)
for (int j=0; j<m; j++ )
{printf ("vvedite znachenie a(%d,%d)= ",i , j);
scanf("%g", &a[i][j]);
} }


void out( float b[2500], int n )//функция вывода массива d
{ int i;
for (i=0; i<n; i++)
printf (" b(%d)=%g\n ",i , b[i]);
}


int mod(float a[][50], float b[2500],int n,int m)//функция формирования массива d
{ int i, j, k=0;
for( i=0; i<n; i++)
for( j=0; j<m; j++)
if(abs(a[i][j])<1)
{
b[k]=a[i][j];
k++;
}	 return k;
}

void main(void)
{ int n, m, i, j, k;
float a[50][50], b[2500];

printf("vvedite kolo stolb m=");
scanf("%d", &m);
printf("vvedite kolo strok n=");
scanf("%d", &n);
input(a, n, m);
k=mod(a, b,n,m);
out(b,k);
getch();
}
//
 
R

RayPeace

#18
Whatka спасибо большое, какой раз уже меня выручаете:huh:
 
Статус
Закрыто для дальнейших ответов.