Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос с матрицами.  (Прочитано 11861 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Bobuch
Гость
« : 01-12-2005 16:23 » 

Задание:
Вычислить произведение элементов столбца, проходящего через первый отрицательный элемент побочной диагонали матрицы Н(45,45).

уже написал програмульку (на с++) которая генерит двумерный массив 45 строк и 45 столбцов со случайными числами от 0 до 1024 и сохраняет результат в текстовый файл с разделителями 

#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
#include <fstream.h>
#include <conio.h>
//------------------------------------------------
main()
{
     ofstream outRandFile("matrix.txt", ios::out);

int matrix [45] [45];

 for (int line=0; line<45; line++)
  {
     for (int colum=0; colum<45; colum++)
    {
     matrix [line] [colum]=rand()%1024;
    outRandFile<<matrix [line] [colum]<<"   ";
    }
    outRandFile<<endl;
  }
 cout<<"Press anykey for exit!";
 while(!kbhit());
return 0;
}

и на этом "встал" Жаль. Помогите, плз,  расшевелить мозги, скоро экзамен!
« Последнее редактирование: 01-12-2005 19:04 от Bobuch » Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #1 : 01-12-2005 20:56 » 

Несколько замечаний и вопросов:
1. Твоя программка в нынешнем виде никак тебе не поможет в решении задачи ибо в генерируемой матрице не будет ни одного отрицательного элемента(но это лирика)
2.В каком направлении должен искатся первый отрицательный элемент на побочной диагонали с правого верхнего угла в левый нижний или наоборот?
3. Как говорил наш препод "Побочными бывают только дети, а диагональ дополнительная" Отлично

В принципе алгоритм и прога несложные. Как только выясним подробности код делается без проблем
Записан
Bobuch
Гость
« Ответ #2 : 01-12-2005 21:09 » 

Про отрицаетльные элементы знаю, но ничего пока поделать не могу, т.к. с rand() еще не разобрался.
направление поиска не имеет особого значения, на данном этапе написал еще немного кода:

int pdiag[45];

 for (int i=0; i<45; i++)
 {
    pdiag=matrix [44-i] ;
    cout<<"Element #"<<i<<" - "<<pdiag<<endl;
 }

в данном массиве теперь содержаться все элементы нужной диагонали, осталось только организовать по нему поиск...
Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #3 : 01-12-2005 21:33 » 

Для поиска можно использовать следуещий код
Код:
int FirstMinus=0;
while(pdiag[i]>=0)
 FirstMinus++;
Таким образом будет найдено первое отрицательное число на побочной диагонали
После этого делаем
Код:
int Res=1;
for(int i=0;i<44;i++)
 Res*=matrix[i][FirstMinus];
По идее после этого у тебя в Res будет произведение всех элементов столбца, который проходит через первый отрицательный элемент побочной диагонали.

А вместо rand() можеш пользовать random(N+1)-N/2.Таким образом получиш случайное число [-N/2,N/2].Только в самом начале вызови  randomize() чтоб случайная последовательность не повторялась каждый раз.
Записан
Bobuch
Гость
« Ответ #4 : 01-12-2005 22:03 » 

Спасибо за ответ, но очень хочеться узнать поподробней про random.
код я додумал потихоньку, будет он выгляджить так:
for (int i=0; i<45; i++)
 {
 pdiag=matrix [44-i] ;   
    if (pdiag<0)
    {
            int sum;      
            for(int n=0; n< 45;i++)
        {
               sum+=matrix[n];
        }
      cout<<"Summa stolbca="<<sum<<endl;
      while(!kbhit());
           break;
    } 

а вопрос со случайными отрицательными значения для меня пока не решен...
еще раз смпасибо за помошь Улыбаюсь
Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #5 : 01-12-2005 22:52 » 

Не хочу показатся невежливым, но в первоначальной задаче шла речь о произведении элементов столбца, а в итоге ты щитаешь сумму элементов столбца.
А про random(int n) можеш глянуть в хелпе, ну а если коротенько, то он возвращает целое псевдослучайное число в интервале [0,n-1].Однако если при использовании random не вызывать функцию randomize, то от запуска к запуску программы псевдослучайная последовательность будет повторятся.
Удачи!!!
Записан
Bobuch
Гость
« Ответ #6 : 01-12-2005 23:50 » 

Да, действительно произведение. Это просто моя невнимательность Молчу  и забитая программированием бошка.
Спасибо за поправку Отлично
Записан
kasper
Гость
« Ответ #7 : 02-12-2005 00:05 » 

Приведите, пжлст, применение функции randomize в исходнике.
Я когда-то делал, сейчас подзабыл.
Записан
Bobuch
Гость
« Ответ #8 : 02-12-2005 10:43 » 

Да, да!!! Будьте добры! Улыбаюсь
Записан
Sands
Помогающий

ua
Offline Offline

« Ответ #9 : 06-12-2005 21:13 » 

Стоп! Может я чего-то не понимаю, но void randomize(void) - это стандартный макрос из stdlib.h, который производит начальную инициализацию генератора случайных чисел случайной величиной, основываясь на функциях завязаных на время.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines