Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

мда, ну никак не могу найти код для обратной матрицы. Решения СЛАУ методом Seidel( Зейделя )еше можно найти, а вот обратной матрицы нет.

Спасибо за ссылку, но програма не работает, причем ошибок где-то 11 :(

Проверил программу по ссылке. Ну, ей нехватает стандартных заголовочных файлов плюс в одном месте (компилятор указывает) нехватает объявления i как int. После этого она работает. Но она тоже для решения СЛАУ. Метод Зейделя, насколько я посмотрел, даже в теории используется только для решения систем уравнений, а не для обращения матриц.
Ссылка на комментарий
Поделиться на другие сайты

по идее , метод простых итераций и метод Зейделя почти идентичны. ( http://tpdn.ru/library/articles/52/14014/#n3 )

Возможен ли метод простых итераций при обращения матриц?

Вот, сегодня добавил в програм метод Гаусса — Жордана для обращения матриц. Остался только Зейдел или метод простых итераций :( Вот что получилось

#include<stdio.h>#include<math.h>#include<conio.h>#include<ctype.h>#include<stdlib.h>#define NN 10int main(){clrscr();double a[NN][NN],A[NN][NN], X[NN][NN], t, det, sum;int i, j, n=3 , m, l , lt , k;char yn;for ( i=0; i<n; i++ )for( j=0; j<n; j++)	A[i][j] = a[i][j];for (i=0; i<n; i++) {	for(j=n; j<2*n; j++)	a[i][j] = 0;	a[i][i+n] = 1;}// <----Ввод квадратной матрицы---->do {	printf("\n ранг матрицы (от 2 до %d): N=",NN);	n = getche()-48;} while((n<2) || (n>NN));// <---- Ввод матрицы[NN][NN]---->printf("\n\n Случайные элементы матрицы? y/n: ");yn = getche();switch(tolower(yn)){	case 'y':		for(i=0;i<n;i++)			for(j=0;j<n;j++) a[i][j]=rand()%10;	break;	case 'n':		printf("\n Ввод матрицы %dx%d\n",n,n);		for(i=0;i<n;i++)			for(j=0;j<n;j++)				scanf("%lf", &a[i][j]);	break;	default:	{		for(i=0;i<n;i++)		{			for(j=0;j<n;j++) a[i][j]= 0;			a[i][i] = (rand()%10) + 1;		}	}	break;} // <----Исходная матрица---->printf("\n Исходная матрица \n");for(i=0;i<n;i++) {	for(j=0;j<n;j++) printf("  %6.2lf", a[i][j]);	printf("\n");} // <----определитель---->det = 1;for(l=0; l<n-1; l++){	if(a[l][l]==0)	{		m = l+1;		while((a[m][l] == 0) && (m<n)) m++;		if(m >= n) {			printf("\n Det A = 0");			getch(); return 0;		}		for(j=0; j<n; j++)		{			t = a[m][j];  a[m][j] = a[l][j]; a[l][j] = t;			det = -det;		}	}	for (i=l+1; i<n; i++)	{		t = a[i][l]/a[l][l];		for(j=l+1; j<n; j++)			a[i][j] = a[i][j] - a[l][j]*t;	}	for (i=l+1; i<n; i++)		a[i][l] = 0;	printf("\n Матрица на шаге %d \n", l+1);	for(i=0;i<n;i++) {		for(j=0;j<n;j++) printf("  %6.2lf", a[i][j]);		printf("\n");	}}//обратная матрица методом Gauss-Jordanfor(lt=0; lt<n; lt++){	X[n-1][lt] = a[n-1][n+lt] / a[n-1][n-1];	for (i=n-2; i>=0;i--)	{		sum = 0;		for (j=i+1; j<n; j++)			sum = sum + a[i][j] * X[j][lt];		X[i][lt] = (a[i][n+lt] - sum) / a[i][i];	}}printf("обратная матрица\n");for ( i=0; i<n; i++ ){       for(j=0;j<n;j++)		printf(" %8.3lf", X[i][j]);       printf("\n");}printf("\n Проверка: A*X = I? \n");for (i=0; i<n; i++){	for (j=0; j<n; j++)	{		sum = 0;		for (k=0; k<n; k++)			sum = sum + a[i][k] * X[k][j];		printf(" %10.3le", sum);	}       printf("\n");}for(i=0; i<n; i++)	det *= a[i][i];printf("определитель =: %14.3f", det);getch();return det;;}
Изменено пользователем Radu
Ссылка на комментарий
Поделиться на другие сайты

Пусть А и B – две разреженные матрицы, реализованные посредством динамических списков. Размерность матрицы В по обоим измерениям не должна превосходить размерность матрицы А. Проверить, является ли матрица В частью матрицы А и определить координаты верхнего левого угла в матрице А, откуда начинается совпадение с матрицей В. Если матрица А не содержит в себе матрицы В – вернуть пару (–1,–1)

Помогите пожайлусто. Вообще без понятия как делать. Среда разработки Pascal ABC. Заранее благодарен.

Изменено пользователем vampir4eg
Ссылка на комментарий
Поделиться на другие сайты

Radu

по идее , метод простых итераций и метод Зейделя почти идентичны.

Возможен ли метод простых итераций при обращения матриц

Возможен, хотя мне ничего такого не попадалось, поскольку, вероятно, он очень неэффективен. В принципе обратная матрица может быть найдена решением n систем линейных уравнений с правыми частями, представляющими векторы с одной единицей и остальными нулями - http://coderov.net/vma/138-computation-of-determinants/854-matrix-inversion.html Эти системы можно решать методом прямых итераций, методом Зейделя и прочими. Но при нормальном обращении матрицы методом Гаусса-Жордана решения этих систем частично совмещены, поэтому получается намного короче и быстрее.
Ссылка на комментарий
Поделиться на другие сайты

vampir4eg

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

P.S. Тут главное - писать комментарии в начале каждого блочка программы, чтобы не запутаться.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль

спс конечно, что ответил ну я всёровно вообще не понимаю как её делать ( может потому,что не знаю как сделать разряженые матрицы и создать их при помощи динамического списка) не могли бы вы помочь с этим??

Изменено пользователем vampir4eg
Ссылка на комментарий
Поделиться на другие сайты

не знаю как сделать разряженые матрицы и создать их при помощи динамического списка

Вот программа для ввода разреженной матрицы целых чисел с хранением ее в динамическом списке и контрольной выдачи элементов матрицы. Как я раньше заметил, для сравнения удобно хранить матрицу в списке не в порядке ввода ее элементов, а отсортированной по индексам строк и столбцов, поэтому после ввода элементы матрицы в списке сортируются по их индексам.

    #include <list>   #include <iostream>   using namespace std;   class Data{public:int row,col,val;   bool operator < (const Data& rhs){return row*10000L+col<rhs.row*10000L+col;}};   int main(){     // создаем динамический список     list<Data> mylist;     // вводим в список данные элементов матрицы     Data dat;     while(true){cout<<"Row(0 - exit): "; cin>>dat.row;if(dat.row==0)break;      cout<<"Column:        "; cin>>dat.col; cout<<"Value:         "; cin>>dat.val;      cout<<endl; mylist.push_back(dat);}     // сортируем список     mylist.sort();     // выводим элементы матрицы     cout<<endl<<"     Row  Column   Value"<<endl;     for(list<Data>::const_iterator cit=mylist.begin();cit!=mylist.end();++cit)        {cout.width(8); cout<<(*cit).row; cout.width(8); cout<<(*cit).col;         cout.width(8); cout<<(*cit).val<<endl;}     getchar(); getchar();}

В программе вводятся индексы и значение для каждого элемента разреженной матрицы, они заносятся в динамический список, потом список сортируется и элементы матрицы выводятся на экран в порядке возрастания их индексов.

P.S. По какой специальности ты учишься?

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Программное обеспеченье. Можете этот код на паскале сделать? Как что качается матрицы у меня всё начинаются затупы )

i

Уведомление:

Нет ни малейшей нужды полностью цитировать предыдущее сообщение. Совершенно. То бишь - абсолютно...

P.S. Это, конечно, не моё дело, и вообще... Но!

Скажите, каким образом вы рассчитываете писать (нормальный) код, если даже в родном языке ляпаете столь чудовищные по нелепости ошибки?

Изменено пользователем Yezhishe
Ссылка на комментарий
Поделиться на другие сайты

vampir4eg

То же самое на PascalABC.NET.

typenode=class row,col,val:integer; next:node; constructor(r,c,v:integer; n:node); begin row:=r; col:=c; val:=v; next:=n; end; end;var p,pn:node; row,col,val,t:integer; b:boolean;beginp:=nil;// вводим в список данные элементов матрицыwhile true do begin write('Row(0 - exit): '); readln(row); if row=0 then break; write('Column:        '); readln(col); write('Value:         '); readln(val);  p:=new node(row,col,val,p); end; pn:=p; writeln;// сортируем списокrepeat p:=pn; b:=true; while p.next<>nil do begin    if p.row*10000+p.col>p.next.row*10000+p.next.col then      begin t:=p.row; p.row:=p.next.row; p.next.row:=t;             t:=p.col; p.col:=p.next.col; p.next.col:=t;            t:=p.val; p.val:=p.next.val; p.next.val:=t;      b:=false end;   p:=p.next end;    until b;// выводим элементы матрицыwriteln('     Row  Column   Value');p:=pn; while p<>nil do begin writeln(p.row:8,p.col:8,p.val:8); p:=p.next; end;readlnend.
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Всем Привет!

помогите пожалуиста решить задачу на языке C++

Задача:

решения СЛАУ(Система линейных алгебраических уравнений)методом Гаусса.

Ссылка на комментарий
Поделиться на другие сайты

Решение СЛАУ методами Гаусса, Зейделя, простой итерацией, ортогонализацией. Исходники и exe на С++ ( Visual Studio 2008 ).

ООП подход. Для систем размерности N на N+1, точность задается.

Источник

SLAU.rar

P.S. Хотя стоило бы сначала поискать в инете... так на будущее ;)

SLAU.rar

Ссылка на комментарий
Поделиться на другие сайты

стоило бы сначала поискать в инете...
Тут ни прибавить, ни убавить... :)

Вот еще один исходник, к примеру.

Ссылка на комментарий
Поделиться на другие сайты

Тут ни прибавить, ни убавить... :)
согласен, т.к. типовые задачи решались многократно и их можно спокойно найти по поиску.

P.S. Странно я даже поборол свою лень и зарегистрировался, так просто скачать нельзя было, можно сказать одержал очередную победу над своей ЛЕНЬЮ :D

Ссылка на комментарий
Поделиться на другие сайты

Помогите пожалуйста в Pascal написать программу:

Записать каждое слово текстовой строки в отдельную строку экрана с большой буквы.

Ссылка на комментарий
Поделиться на другие сайты

Помогите пожалуйста в Pascal написать программу:

Записать каждое слово текстовой строки в отдельную строку экрана с большой буквы.

можно пример?

А так же где размещается текст и в каком формате.

Задача то простая, просто не хочется переписывать её (программу) 10 раз - нужно более точное/подробное ТЗ на ПО.

Ссылка на комментарий
Поделиться на другие сайты

Да, тут толком не определено, что такое слово. Постараемся учесть латинские и русские буквы и цифры.

var s:string; i:integer;beginwrite('string: '); readln(s); s:=' '+s;for i:=2 to length(s) do  begin  if(s[i-1]<'0')and(s[i]>='0')then   begin    writeln;    if s[i]>='A' then s[i]:=chr(ord(s[i])-32*ord(ord(s[i])mod 64>=32))   end; if s[i]>='0' then write(s[i])  end;writeln; readlnend.
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

проблема - нужна сделать поиск по БД который на запрос 'зам' выдавал к отображению в DBGrid только те записи в которых слова начинаются на 'зам'.

сам пробовал но не осилил. филтрация работает только с точным значением,а поиск отображет всю БД

я использовал

//поиск(Table1.Locate('tv', Edit13.Text,[loCaseInsensitive, loPartialKey]));//филтрацияTable1.Filter:='tg'+'='+AnsiQuotedStr(Edit13.Text,'''');end;Table1.Filtered:=true;

бд и програмка простенькие - никаких серверов, сетей и т.д.

ннужна часть кода на дэлфи которую можно вставить в кнопку и увидить нужный результат, и очень хоотелосьбы с указанием используемых компонентов и коментариями (извините, понимаю что все после работы)

Ссылка на комментарий
Поделиться на другие сайты

Можно использовать SQL шаблоны типа

Table1.Filter:='SELECT * FROM tv WHERE tg LIKE 'зам%''
Изменено пользователем Teddy_Bear
Ссылка на комментарий
Поделиться на другие сайты

Можно использовать SQL шаблоны типа

Table1.Filter:='SELECT * FROM tv WHERE tg LIKE 'зам%''

пробовал использовать но ругается

с начало на зам - заменил на эдит, потом нот фоунд на селект, потом на фром и тд

и достаточно чтобы искало в 1 поле, как я пеонел можно просто убрать -WHERE имя поля

Ссылка на комментарий
Поделиться на другие сайты

В Pascal пожалуйста напишите программу:

Вывести на экран все символы цифр заданного текстовой строки.

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте!

Решите, пожалуйста, задачу!

Язык: С++

Тема: Использование связных списков.

Уровень написания задачи: Простой, Элементарный, Начальный.

Условие:

Использовать (линейные) однонаправленные списки без заглавного звена (рис.а)

или с заглавным звеном (рис. б) при следующем их описании

im.png

Параметр L обозначает список, а параметры E и E1 - данные типа TE,

к которым можно применять операции присваивания и проверки на ровность. {TE = double}

Определить функции, что объединяют два упорядоченных по возрастанию списка L1 и L2 (TE = double)

в один упорядоченный по возрастанию список;

а)построив новый список L;

б)изменяя соответствующим способом ссылки в L1 и L2 и присвоив полученный список параметру L1.

в)результат записывается в отдельный файл.

Заранее, огромное спасибо!

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте. Помогите пожалуйста.

Такая задача:

Разработайте алгоритм программы, которая считывает с клавиатуры Ф.И.О. и заменяет строчные буквы на прописные.

Модернизируйте программу так, чтобы результаты не только выводились на экран, но и записывались в файл

Сделал такую прогу:

var S:string;i:integer;beginwrite('Введите строку : '); readln(S);for i:=1 to Length(S) do   S[i-1]:=upcase(s[i-1]); S[i]:=upcase(S[i]);write('Результат ',S);readlnend.

Но она меняет строчные на прописные только для английского алфавита. Как сделать для русского?

Ссылка на комментарий
Поделиться на другие сайты

Задан целочисленный массив размера N. Отсортировать элементы массива в

порядке возрастания количества разрядов установленных в «1» в двоичном

представлении элементов массива. Например:

5 3 1 7 2 10 → 1 2 5 3 10 7

Как вывести уже отсортированый массив в десятичном исчислении??

Допустим дан массив в десятичном исчислении---> A [5 3 1 2 7 10] перевёл его в двоичное исчесление получилось--> B [2 2 1 1 3 2] (каждого цифра массива В это кол-во единиц каждой цифры в массиве А),

отсортировал массив В получил--> В [1 1 2 2 2 3], как теперь сделать чтоб вывел массив В в десятичном приставлении?? тоесть B[1 1 2 2 2 3] ---> B [1 2 5 3 10 7]

И объясните что ознаечает if (a & 1 ) count++; и a = a >> 1;

Извеняюсь за кривую табуляцию

язык С

#include <stdio.h>int main(int argc, char *argv[]){int count = 0;int n; printf ("vvedite razmer massiva: "); scanf ("%d",&n); int a[n]; int b[n]; printf ("Vvedite elementi massiva: "); for ( int i=0;i<n;i++){ scanf ("%d",&a[i]);                              }  printf("Ishodnii massiv: ");for ( int i=0;i<n;i++) {  printf ("%d\t",a[i]);                             }printf ("\n");for ( int i=0;i<n;i++) {  while ( a[i] != 0 )  {     if (a[i] & 1 ) count++;     a[i] = a[i] >> 1;     b[i]=count ;  }  count=0;                          }printf ("Chislo edinic kajdogo elementa: ");for ( int i=0;i<n;i++)       {  printf ("%d\t",b[i]);       }for (int i=0;i<n;i++)               {for(int i=0;i<n-1;i++)         if(b[i]>b[i+1])                               {            int r = b[i];            b[i] = b[i+1];            b[i+1] = r;                          }             }printf("\n");printf("Rezult:          "); for(int i=0;i<n;i++) printf("%d\t",b[i]);printf("\n");   return 0;}
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...