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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2009, 20:01   #1
Law1589
Новичок
Джуниор
 
Регистрация: 15.11.2009
Сообщений: 3
Смех заполнение матрицы рандомом

Приветствую всех)

У меня следующее задание:
Для матрицы размером n*m вычислить сумму элементов k-той строки.
Разделить на это число элементы строки матрицы с индексом l.
Значения k и l вводятся.
Исходная матрица задаётся в виде двумерного массива случайным образом.
Вывести на экран исходную и результирующуюю матрицу.

Задание я выполнил, но матрица всегда выводится одна и та же.
Читал про это, но не смог исправить. Помогите пожалуйста сделать так, чтобы матрица была всегда рандомная, а не одинаковая. И посоветуйте- может что в программе исправить надо, или поменять. ( я думал задать размерность матрицы а константой, но в начале не сделал и не стал менять).

Код программы на си++ (прога консольная):

Код:
//---------------------------------------------------------------------------

#include <clx.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
#include <iostream.h>
#include <math.h>
#include <conio.h>
void main()
{
clrscr();
int q,k,l,i,j,sum;
double a[5][5],b[5];

for (i=0; i<5; i++)
        {  for (j=0; j<5; j++)     //заполнение рандомом
        a[i][j]=random(10);
        }
cout<<" Isxodnii massiv:";
for (i=0;i<5; i++)
        { cout<< "\n" ;
         for (j=0; j<5; j++)       //вывод исходного массива
          cout<<a[i][j]<<" ";;
        }

do { cout<<"\n Vvedite nomer strochki\n k=";
cin>>k;
   }
while                                //ввод и проверка k
(k<=0||k>5);

sum=0;
k=k-1;
for(j=0;j<5;j++)                      //сумма элементов k-той строки
        sum=sum+a[k][j];
k=k+1;
cout<<"\n Summa elementov "<<k<<" stroki ravna = "<<sum<<"\n";

do
{ cout<<"\n Vvedite l \n l=";
cin>>l;
}                              // вводим и проверяем l
while (l<=0||l>5);

for (j=0;j<5;j++)        // в массив b заносятся элементы массива a
b[j]=a[l-1][j]/sum;      // строки l разделеные на sum

for (j=0;j<5;j++)       // строка l массива a заменяется на b
a[l-1][j]=b[j];


cout<<"\n Rezultat:  \n";
for (i=0;i<5; i++)
        { cout<< "\n" ;
         for (j=0; j<5; j++)       //вывод конечного массива
          cout<<a[i][j]<<" ";;
        }

cin>>q;       // это для задержки экрана
}
//---------------------------------------------------------------------------
Law1589 вне форума Ответить с цитированием
Старый 16.11.2009, 20:08   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

чтобы значения были разными:

Код:
#include <time.h>
...
srand(time(0));

// заполняем матрицу
...
Цитата:
// в массив b заносятся элементы массива a
а что мешает сразу делить элементы строки, без доп массива?

Код:
a[l][j]/=sum

Цитата:
посоветуйте- может что в программе исправить надо, или поменять.
размерность матрицы вводите с клавиатуры
counter вне форума Ответить с цитированием
Старый 17.11.2009, 00:11   #3
Law1589
Новичок
Джуниор
 
Регистрация: 15.11.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение

Код:
#include <time.h>
...
srand(time(0));

...
Код:
a[l][j]/=sum
За это спасибо.
Почему сразу не делил в массиве а записывал в новый - это потому что начал путаться, когда писал эту часть, решил сделать так и не менял.

Как определить переменные и массив, чтобы вводить с клавы?
массив double a[m][n]
а как перед этим m и n определить?

Последний раз редактировалось Law1589; 17.11.2009 в 00:30.
Law1589 вне форума Ответить с цитированием
Старый 17.11.2009, 00:37   #4
forsaken66
Куды бечь?
Форумчанин
 
Аватар для forsaken66
 
Регистрация: 05.10.2009
Сообщений: 104
По умолчанию

Law1589 сделай динамическую матрицу вот так:

int **a; //Указатель на указатель =)
int x,y; //Размеры матрицы
// тут вводишь с клавиатуры x,y

a = new int*[x]; /*Выделили память под x-указателей, которые будут //указывать на строки*/

for(int i=0;i<x;++i)
a[i] = new int[y]; /*Каждому указателю выделяем память под y-элементов типа int*/

//обращение:
for(int i=0;i<x;++i)
for(int j=0;j<y;++j)
a[i][j] = 0; //Обращение к j-му элементу (столбцу) i-ой строки

//Освобождение памяти

for(int i=0;i<x;++i)
delete [] a[i];
delete [] a;

пишет cin>>q; // это для задержки экрана
_getch(); или getch(); так лучше по моему.
Не хватало всего одного байта. Да-да, того самого, что из восьми бит состоит.

Последний раз редактировалось forsaken66; 17.11.2009 в 00:41.
forsaken66 вне форума Ответить с цитированием
Старый 17.11.2009, 14:01   #5
Law1589
Новичок
Джуниор
 
Регистрация: 15.11.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от forsaken66 Посмотреть сообщение

пишет cin>>q; // это для задержки экрана
_getch(); или getch(); так лучше по моему.


по-любому лучше)))))

спасибо всем честным кто ответил!
Law1589 вне форума Ответить с цитированием
Старый 17.11.2009, 23:04   #6
kedbl4
Пользователь
 
Регистрация: 09.09.2009
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Law1589 Посмотреть сообщение
по-любому лучше)))))

спасибо всем честным кто ответил!
или
Код:
system("pause");
мона еще использовать
kedbl4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение матрицы -=aHTPoПоС=- Помощь студентам 3 06.11.2009 17:33
Заполнение матрицы Pascal lebrosha Помощь студентам 3 25.05.2009 19:55
Заполнение матрицы Pedro Помощь студентам 3 22.04.2009 23:53
заполнение матрицы в паскале evilguy Помощь студентам 2 07.02.2009 22:28
создание и заполнение матрицы Blad47 Общие вопросы C/C++ 6 13.12.2008 16:38