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

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


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

мда, ну никак не могу найти код для обратной матрицы. Решения СЛАУ методом 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. По какой специальности ты учишься?

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

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

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.
Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Всем Привет!

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

Задача:

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

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

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

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

Источник

SLAU.rar

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

SLAU.rar

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.
Изменено пользователем Тролль
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

проблема - нужна сделать поиск по БД который на запрос 'зам' выдавал к отображению в 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;}
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

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



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