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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2008, 20:34   #11
FatalX
Пользователь
 
Регистрация: 13.07.2008
Сообщений: 11
По умолчанию

Цитата:
Сообщение от -=<[Evklidd]>=- Посмотреть сообщение
1)организуем циклы по номеру строки и номеру столбца матрицы, индексами например будут переменные j и i, которые изменяются от 1 до 10
2) внутри организуем еще два цикла для проверки соседей, где индексы, например jx и ix, изменяются уже от j-1 до j+1 - индекс jx, и от i-1 до i+1 - индекс i, это в общем случае, когда соседей максимально восемь, тут правда будет происходить сравнение с самим собой, но неравенство-то ведь строгое.
3) проверяем выполняется ли условие: элемент матрицы с индексами j,i < элемента матрицы с индексами jx,ix
4) при истинности условия увеличиваем значение переменной, отвечающей за кол-во локальных минимумов и имеющая изначальное значение 0.
Вот такой алгоритм
ЗЫ Хочу добавить, что все эти циклы вложенные друг в друга, то есть получитца четыре последовательно вложенных цикла
пасиба большое чел 2ую задачу уже почти доделал тока вот мучаюсь с функцией подсчёта максимума,т.к там шаблоны нада.
FatalX вне форума Ответить с цитированием
Старый 13.07.2008, 20:39   #12
-=<[Evklidd]>=-
Форумчанин Подтвердите свой е-майл
 
Аватар для -=<[Evklidd]>=-
 
Регистрация: 22.01.2008
Сообщений: 161
По умолчанию

В смысле - шаблонов? Должны работать для матрицы любой размерности?
-=<[Evklidd]>=- вне форума Ответить с цитированием
Старый 13.07.2008, 20:40   #13
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

По первой задаче по поиску локальных минимумов есть код на Паскале, может кто переведет. Там правда еще поиск максимальнлго среди них, специально не вычеркнул, вдруг кому надо. Ну а сумму модулей элементов выше диагонали это детство.
Код:
uses crt;
type Matr=array[1..10,1..10]of integer;
var a:Matr;
    i,j,k,max:integer;
function LocMin(i,j:integer;a:Matr):boolean;
begin
LocMin:=((i=1)or(a[i,j]<a[i-1,j]))and
        ((j=1)or(a[i,j]<a[i,j-1]))and
        ((i=5)or(a[i,j]<a[i+1,j]))and
        ((j=1)or(a[i,j]<a[i,j+1]));
end;
begin
clrscr;
randomize;
for i:=1 to 10 do
   begin
    for j:=1 to 10 do
      begin
        a[i,j]:=random(20);
        write(a[i,j]:4);
      end;
    writeln;
   end;
writeln;
k:=0;max:=-maxint;
for i:=1 to 10 do
for j:=1 to 10 do
if LocMin(i,j,a)then
   begin
     k:=k+1;
     if a[i,j]>max then max:=a[i,j];
   end;
writeln('k=',k,'  max=',max);
readln
end.
puporev вне форума Ответить с цитированием
Старый 13.07.2008, 20:41   #14
FatalX
Пользователь
 
Регистрация: 13.07.2008
Сообщений: 11
По умолчанию

Цитата:
Сообщение от -=<[Evklidd]>=- Посмотреть сообщение
В смысле - шаблонов? Должны работать для матрицы любой размерности?
вот ввод вывод и нахождения максимума последнее кажись так но не уверен template <class T> void in_array(T *matr,int n)
{
for (int i=0;i<n;i++)
{
cout << RUS("Введите элементы строки ") << (i+1) << ":";
for (int j=0;j<n;j++)
cin >> matr[i*n+j];
cout << endl;
}
}

template <class T> void out_array(T *matr,int n)
{
for (int i=0;i<n;i++)
{
cout << RUS("Элементы строки ") << (i+1) << ":";
for (int j=0;j<n;j++)
cout << setw(4) << matr[i*n+j];
cout << endl;
}
}

template <class T> Type max m(Type*a,int n);
{
int i;
for (max=a[0], max n=0, i=0;i<n;i++)if(max<n[i]{max=n[i];max n=i});
for (int j=0;j<n;j++)
FatalX вне форума Ответить с цитированием
Старый 13.07.2008, 20:49   #15
-=<[Evklidd]>=-
Форумчанин Подтвердите свой е-майл
 
Аватар для -=<[Evklidd]>=-
 
Регистрация: 22.01.2008
Сообщений: 161
По умолчанию

2 puporev: в этом-то и проблема, пока на Си переводить некому, на Паскале я бы давно написал, а не мучался и писал бы алгоритм словами
2 FatalX: увы не могу проверить ваш код - на Си не говорю и не пишу, так что извиняйте, помог чем смог
-=<[Evklidd]>=- вне форума Ответить с цитированием
Старый 13.07.2008, 21:11   #16
Igoressicus
Пользователь
 
Регистрация: 13.07.2008
Сообщений: 23
Радость Первая задачка :)

Типа того что есть с учётом того что это С++ ( При обращении например к arr[-1][n] возьмёт число из потока а нам этого не нуна

#include "math.h"
#include "windows.h"
#include "iostream.h"
#include "stdlib.h"
#include "time.h"


void main ()
{
const int n=10, m=10;
SetConsoleOutputCP(1251);
int arr [n][m];
int i, j;
int iCountLM=0;
bool flag;
int iSummAbsUpMain=0;
srand(time(NULL));
cout << "Исходная матрица \n";
for (i=0 ; i<n; i++)
{
for (j=0; j<m; j++)
{
arr[i][j]= -100+rand()%201;
cout << arr[i][j] << " ";

}
cout << endl;
}
for (i=0 ; i<n; i++)
{
for (j=0; j<m; j++)
{
flag = true; // По умолчанию элемент есть ЛМ
// если где-то он неудовлетворит условию, ЛМ он не будет
// left up
if (!(i-1<0))
{
if (arr[i][j]>=arr[i-1][j-1]) flag = false;
}
// up
if (!(i-1<0))
{
if (arr[i][j]>=arr[i-1][j]) flag = false;
}
//right up
if (!(j>m-1))
{
if (arr[i][j]>=arr[i-1][j+1]) flag = false;
}
//right
if (!(j+1>m-1))
{
if (arr[i][j]>=arr[i][j+1]) flag = false;
}
//ritht down
if (!(j+1>m-1))
{
if (arr[i][j]>=arr[i+1][j+1]) flag = false;
}
//down
if (!(i+1>n-1))
{
if (arr[i][j]>=arr[i+1][j]) flag = false;
}
//left down
if (!(i+1>n-1))
{
if (arr[i][j]>=arr[i+1][j-1]) flag = false;
}
//left
if (!(j<0))
{
if (arr[i][j]>=arr[i][j-1]) flag = false;
}
if (flag) iCountLM+=1;
}
}
cout << "Локальных минимумов" << iCountLM<< endl;
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
if (j>i) iSummAbsUpMain+=abs(arr[i][j]);
}
}
cout << "Сумма модулей элементов над главной диагональю " << iSummAbsUpMain<< endl;

}

Последний раз редактировалось Igoressicus; 13.07.2008 в 21:13. Причина: Пояснения
Igoressicus вне форума Ответить с цитированием
Старый 13.07.2008, 21:19   #17
FatalX
Пользователь
 
Регистрация: 13.07.2008
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Igoressicus Посмотреть сообщение
Типа того что есть с учётом того что это С++ ( При обращении например к arr[-1][n] возьмёт число из потока а нам этого не нуна

#include "math.h"
#include "windows.h"
#include "iostream.h"
#include "stdlib.h"
#include "time.h"


void main ()
{
const int n=10, m=10;
SetConsoleOutputCP(1251);
int arr [n][m];
int i, j;
int iCountLM=0;
bool flag;
int iSummAbsUpMain=0;
srand(time(NULL));
cout << "Исходная матрица \n";
for (i=0 ; i<n; i++)
{
for (j=0; j<m; j++)
{
arr[i][j]= -100+rand()%201;
cout << arr[i][j] << " ";

}
cout << endl;
}
for (i=0 ; i<n; i++)
{
for (j=0; j<m; j++)
{
flag = true; // По умолчанию элемент есть ЛМ
// если где-то он неудовлетворит условию, ЛМ он не будет
// left up
if (!(i-1<0))
{
if (arr[i][j]>=arr[i-1][j-1]) flag = false;
}
// up
if (!(i-1<0))
{
if (arr[i][j]>=arr[i-1][j]) flag = false;
}
//right up
if (!(j>m-1))
{
if (arr[i][j]>=arr[i-1][j+1]) flag = false;
}
//right
if (!(j+1>m-1))
{
if (arr[i][j]>=arr[i][j+1]) flag = false;
}
//ritht down
if (!(j+1>m-1))
{
if (arr[i][j]>=arr[i+1][j+1]) flag = false;
}
//down
if (!(i+1>n-1))
{
if (arr[i][j]>=arr[i+1][j]) flag = false;
}
//left down
if (!(i+1>n-1))
{
if (arr[i][j]>=arr[i+1][j-1]) flag = false;
}
//left
if (!(j<0))
{
if (arr[i][j]>=arr[i][j-1]) flag = false;
}
if (flag) iCountLM+=1;
}
}
cout << "Локальных минимумов" << iCountLM<< endl;
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
if (j>i) iSummAbsUpMain+=abs(arr[i][j]);
}
}
cout << "Сумма модулей элементов над главной диагональю " << iSummAbsUpMain<< endl;

}
спасибо большое но можешь обьяснить что означает ritht down,down,right и т.д впринцепе я так понял они тут не нужны но всёже хотелось бы понять зачем их писать

Последний раз редактировалось FatalX; 13.07.2008 в 21:22.
FatalX вне форума Ответить с цитированием
Старый 17.04.2009, 22:28   #18
ЯН_КА
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 43
По умолчанию Матрица

Ребята, помогите мне, пожалуйста! очень срочно нужно 2 задачи по паскалю до понедельника(((
ЯН_КА вне форума Ответить с цитированием
Старый 17.04.2009, 22:30   #19
DM_bite
Участник клуба
 
Аватар для DM_bite
 
Регистрация: 29.07.2008
Сообщений: 1,091
По умолчанию

Выкладывай, рассмотрим.А вообще, нужно было создавать другую тему.
Кто бы ты ни был - не думай о себе слишком (с)
DM_bite вне форума Ответить с цитированием
Старый 17.04.2009, 22:32   #20
ЯН_КА
Пользователь
 
Регистрация: 17.04.2009
Сообщений: 43
По умолчанию

я не разберусь куда писать!объясните,если не сложно.пожалуйста!
ЯН_КА вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
матрицы chelsi Паскаль, Turbo Pascal, PascalABC.NET 13 25.04.2008 10:07
матрицы tonic Microsoft Office Excel 2 10.01.2008 14:47
матрицы Ensoph Помощь студентам 1 24.10.2007 09:38