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

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


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

Вот программа...

Мне надо, кнопку справки убрать и поставить вместо неё правила перевода чисел из 10 в 16 (и обратно).

И кнопку настройки переименовать во время...

Помогите, пожалуйста

И, чтобы программа выдавала наугад не только целые числа, но и дробные.

Помогите, пожалуйста!

Очень надо.

Заранее благодарен!=))

Программа.rar

Программа.rar

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

Спасибо за помощь )))

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

1)Найти произведение всех элементов массива вещественных чисел, меньших заданного числа. Размерность массива –10. Заполнение массива осуществить случайными числами от 50 до 100. Составить алгоритм

2)Дан целочисленный массив А[1..4, 1..5]. Требуется преобразовать матрицу: поэлементно вы-честь последнюю строку из всех строк, кроме последней. Составить алгоритм

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

AntonyDed

Учебников по Паскалю - как песка на пляже. И наверняка лучших, чем объяснения вашего преподавателя.

Первая программка:

var a:array[1..10]of real; i:integer;begin randomize; for i:=1 to 10 do a[i]:=50*(1+random); for i:=1 to 10 do write(a[i]:8:3); readlnend.

Вторая программка:

var a:array[1..4,1..5]of integer; i,j:integer;begin for i:=1 to 4 do begin write('Enter the elements of string ',i,': '); for j:=1 to 5 do read(a[i,j]) end; writeln;for i:=1 to 4 do begin for j:=1 to 5 do write(a[i,j]:8); writeln end; readln; writeln; for i:=1 to 3 do for j:=1 to 5 do a[i,j]:=a[i,j]-a[4,j];for i:=1 to 4 do begin for j:=1 to 5 do write(a[i,j]:8); writeln end; readlnend.

При вводе элементы строк разделяются пробелами, ввод строки завершается нажатием Enter.

P.S. Стоп, пропустил "меньших заданного числа". В конце решения всегда полезно перечитать условие ;)

var a:array[1..10]of real; i:integer; p,c:real; b:boolean; begin write('c ? '); readln©;randomize; for i:=1 to 10 do a[i]:=50*(1+random); for i:=1 to 10 do write(a[i]:8:3); writeln; writeln;p:=1; b:=false; for i:=1 to 10 do if a[i]<c then begin p:=p*a[i]; b:=true end;if b then writeln(p) else writeln('There is not any number less than c'); readlnend.
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

AntonyDed

Учебников по Паскалю - как песка на пляже. И наверняка лучших, чем объяснения вашего преподавателя.

Первая программка:

var a:array[1..10]of real; i:integer;begin randomize; for i:=1 to 10 do a[i]:=50*(1+random); for i:=1 to 10 do write(a[i]:8:3); readlnend.

Вторая программка:

var a:array[1..4,1..5]of integer; i,j:integer;begin for i:=1 to 4 do begin write('Enter the elements of string ',i,': '); for j:=1 to 5 do read(a[i,j]) end; writeln;for i:=1 to 4 do begin for j:=1 to 5 do write(a[i,j]:8); writeln end; readln; writeln; for i:=1 to 3 do for j:=1 to 5 do a[i,j]:=a[i,j]-a[4,j];for i:=1 to 4 do begin for j:=1 to 5 do write(a[i,j]:8); writeln end; readlnend.

При вводе элементы строк разделяются пробелами, ввод строки завершается нажатием Enter.

P.S. Стоп, пропустил "меньших заданного числа". В конце решения всегда полезно перечитать условие ;)

var a:array[1..10]of real; i:integer; p,c:real; b:boolean; begin write('c ? '); readln©;randomize; for i:=1 to 10 do a[i]:=50*(1+random); for i:=1 to 10 do write(a[i]:8:3); writeln; writeln;p:=1; b:=false; for i:=1 to 10 do if a[i]<c then begin p:=p*a[i]; b:=true end;if b then writeln(p) else writeln('There is not any number less than c'); readlnend.

Ой-ой. Спасибо за помощь в решении задач в паскале. Я, конечно, понимаю, что выгляжу как ленивый студент, которому неохота делать задачки самому, но просто читая учебники паскаля я мало что понимаю, а преподаватель просто напросто ничего не объясняет, а задачки нужно решать в кратчайшие сроки, да и при этом составлять алгоритмы. А когда объясняют, то я понимаю намного лучше. Вы бы не могли немного объяснить по задачам?

var a:array[1..10]of real; i:integer; p,c:real; b:boolean; begin write('c ? '); readln©;randomize; for i:=1 to 10 do a[i]:=50*(1+random); for i:=1 to 10 do write(a[i]:8:3); writeln; writeln;p:=1; b:=false; for i:=1 to 10 do if a[i]<c then begin p:=p*a[i]; b:=true end;if b then writeln(p) else writeln('There is not any number less than c'); readlnend.

Как я понял, сначала заполняется массив числами от 50 до 100. Затем мы вводим число и происходит вычисление произведения всех чисел меньших указанного? Если число меньше хотя бы одно числа из массива, то на экран выводится, тчо нет чисел, меньших заданного?

2).

var a:array[1..4,1..5]of integer; i,j:integer;begin for i:=1 to 4 do begin write('Enter the elements of string ',i,': '); for j:=1 to 5 do read(a[i,j]) end; writeln;for i:=1 to 4 do begin for j:=1 to 5 do write(a[i,j]:8); writeln end; readln; writeln; for i:=1 to 3 do for j:=1 to 5 do a[i,j]:=a[i,j]-a[4,j];for i:=1 to 4 do begin for j:=1 to 5 do write(a[i,j]:8); writeln end; readlnend.

Какой оператор или что-то еще в данном коде отвечает за то, чтобы после введения данных каждой строки на экран снова выводилась подсказка о введении строки, но у же второй? Как вы сделали так, чтобы не повторять операторы writeln, а они сами автоматически появлялись... блин не могу объяснить.

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

AntonyDed

Как я понял, сначала заполняется массив числами от 50 до 100. Затем мы вводим число и происходит вычисление произведения всех чисел меньших указанного? Если число меньше хотя бы одно числа из массива, то на экран выводится, тчо нет чисел, меньших заданного?
Именно так. Чтобы узнать, умножали ли мы хоть один раз, введена булевская переменная с начальным значением false. Если мы хоть один раз умножали, она получает значение true, таким оно и останется.
Какой оператор или что-то еще в данном коде отвечает за то, чтобы после введения данных каждой строки на экран снова выводилась подсказка о введении строки, но у же второй? Как вы сделали так, чтобы не повторять операторы writeln, а они сами автоматически появлялись..
for i:=1 to 4 do begin write('Enter the elements of string ',i,': '); for j:=1 to 5 do read(a[i,j]) end; 

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

При выводе - аналогично

for i:=1 to 4 do begin for j:=1 to 5 do write(a[i,j]:8); writeln end;

в цикле по i перебираются номера строк. Для каждого номера строки сначала циклом с параметром j выводятся значения элементов строки оператором write, который не переводит строку после вывода значения каждого элемента (этим он и отличается от writeln), а затем вызывается оператор writeln, он и переводит строку после вывода всех ее элементов.

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

Суть программирования - разбивание на блоки, у каждого из которых своя подзадача, которые выполняются друг после друга или вкладываются по нескольку в объемлющий блок. Разделяй и властвуй.

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

Нужно решение таковой задачки. Очень прошу помочь, мозгов не хватает на решение задачи.

TurboPascal

Дана матрица mxn. Найти среднее арифметическое каждой строки и поменять его с минимальным значением каждой строки с указанием индексов. Создать новый одномерный массив состоящий из средних арифметических каждой строки и отсортированный по возрастанию.

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

2mbler

Неясно, зачем писать разноцветными нестандартными шрифтами. Мешает читать.

"Найти среднее арифметическое каждой строки и поменять его с минимальным значением каждой строки" невозможно в принципе. Среднему арифметическому нельзя произвольно присвоить какое-либо значение. Можно только заменить прежний минимальный элемент на среднее арифметическое этой строки до замены. И неясно, о каком среднем арифметическом идет речь дальше для "нового массива". Вообще-то такое задание надо возвращать на доработку.

var a:array[1..20,1..20]of real; b:array[1..20]of real; s:real; i,j,jm,m,n:integer;beginwrite('Dimensions of the matrix: '); readln(m,n); writeln;for i:=1 to m do begin write('Row ',i,': '); for j:=1 to n do read(a[i,j]); readln end; writeln;for i:=1 to m do begin for j:=1 to n do write(a[i,j]:8:2); writeln end; writeln;for i:=1 to m do begin s:=0; for j:=1 to n do s:=a[i,j]+s; s:=s/n; b[i]:=s; jm:=1;  for j:=1 to n do if a[i,j]<a[i,jm] then jm:=j; writeln('Minimum in the row ',i:2,' is by j=',jm);  a[i,jm]:=s end; writeln;for i:=1 to m do begin for j:=1 to n do write(a[i,j]:8:2); writeln end; writeln; for i:=1 to m-1 do for j:=1 to m-i do begin s:=b[j]; b[j]:=b[j+1]; b[j+1]:=s end; for i:=1 to m do write(b[i]:8:2); writeln; readln end.

При вводе элементы строк разделяются пробелами, ввод строки завершается нажатием Enter.

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

Извините, за шрифт и за путаницу со средним арифметическим... Вы совершенно верно сказали) Нужно заменить минимальный элемент каждой строки на среднее арифметическое этой же сроки. А вообщем-то сейчас покажу листинг как я делал, но там ошибки есть и их надо исправить, и я не пойму как

program matrix;uses crt;var a:array [1..10, 1..10] of integer;s:array [1..10] of integer;i,j,r,k,d,b,c,min,t:integer;beginclrscr;write('Введите количество строк'); read(n);write('Введите количество столбцов'); readln(m)writeln ('Введите матрицу:');for i:=1 to n dofor j:=1 to m do     begin    gotoxy (j*5+10,i+5);    readln (a[i,j]);     end;for i:=1 to n do     begin    for j:=1 to m do     begin    k:=k+a[i,j];    end;    c:=k div n;    min:=c;    s[i]:=c;    k:=0;{if s[i]<s[i+1] then begint:=s[i];s[i]:=s[i+1];s[i+1]:=t;}gotoxy (i*1, j*4+20);writeln (s[i]:5:0);end;{ end;}for i:=1 to n dofor j:=1 to m do beginif min=a[i,j] then b:=i;if min=a[i,j] then d:=j;{writeln ('Koordinaty', i,'-go minimuma', b, d);}end;readkey;end.

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

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

2mbler

Что не компилируется, это как раз мелочи - это ошибки, которые может изловить даже компилятор. Читай сообщения компилятора и поправляй... Ну, например, переменные n и m у тебя не объявлены, компилятор об этом сообщает, ну так и объяви их. Но ошибки в логике компиляторы не ловят. С ними хуже - почему, например, у тебя все числа целые, ясно же, что среднее арифметическое обычно целым не будет, да и в условии нет ограничения целыми. Со строками и столбцами у тебя уже при вводе путаница. Ну а начиная со строки c:=k div n; идет что-то совсем бессвязное. Такое впечатление, что писалось кусочками в надежде потом их состыковать. Исправить - разве что переписыванием заново всего после ввода матрицы, и тот надо подкорректировать.

Программы лучше писать сначала псевдокодом на русском языке. Например, сначала написать только комментарии к программе типа "вводим данные", "ищем минимальный элемент строки", "находим среднее арифметическое строки", "заменяем минимальный элемент на среднее арифметическое", а потом уже переводить сверху вниз комментарии в куски кода на языке программирования. И по дороге может оказаться полезным вернуться назад и кое-что подкорректировать, например, заменив "ищем минимальный элемент" на "ищем индекс минимального элемента".

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

хорошо, вот более подкорректированная задача

program matrix;uses crt;var a : array [1..10, 1..10] of integer;   s : array [1..10] of real;   t : real;   n,m : integer;   i,j,k,MinIndex : integer;beginclrscr;write('Введите количество строк'); read(n);write('Введите количество столбцов'); readln(m);writeln ('Введите матрицу:');{ввод матрицы}for i:=1 to n dofor j:=1 to m do     begin    gotoxy(j*5+10,i+5); readln(a[i,j]);    end;{найти средние и минимальные значения по каждой строке} for i:=1 to n do begin   k := 0;   MinIndex := 1;   for j:=1 to m do      begin       k:=k+a[i,j];       if a[i,j]<a[i,MinIndex] then MinIndex := j;     end;   {среднее значение строки сохраняем в массив S}   s[i] := k / m;   {выдадим среднее значение строки, минимальное значение строки и индекс минимального значения}   WriteLn(i,'-я строка. Сред.ариф.строки =',s[i]:5:3,        ' минимальное значение = ',a[i,MinIndex],' индекс ',MinIndex);   {записываем среднее значение на место минимального}   a[i,MinIndex] := Trunc(Round(s[i]));  end; {сортировка массива средних значений s} {сортировка массива методом простых обменов ("пузырька") } for i:=1 to n-1 do   for j:=i+1 to n do     if s[i] > s[j] then begin       t := s[i];       s[i] := s[j];       s[j] := t;     end; {вывести отсортированный массив средних значений} WriteLn('Отсортированный массив:'); for i:=1 to n do   Write(s[i]:5:3,'  '); WriteLn;readkey;end.

здесь мне надо вставить индексы минимума и показать на двумерном массиве, что минимум каждой строки заменён на среднее арифметическое этой же строки

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

2mbler

Это уже похоже на истину.

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

 program matrix;uses crt;var a : array [1..10, 1..10] of real;   s : array [1..10] of real;   k,t : real;   n,m : integer;   i,j,MinIndex : integer;beginclrscr;write('Введите количество строк: '); read(n);write('Введите количество столбцов: '); readln(m);writeln ('Введите матрицу:');{ввод матрицы}for i:=1 to n dofor j:=1 to m do     begin    gotoxy(j*5+10,i+5); readln(a[i,j]);    end;writeln;{найти средние и минимальные значения по каждой строке} for i:=1 to n do begin   k := 0;   MinIndex := 1;   for j:=1 to m do      begin       k:=k+a[i,j];       if a[i,j]<a[i,MinIndex] then MinIndex := j;     end;   {среднее значение строки сохраняем в массив S}   s[i] := k / m;   {выдадим среднее значение строки, минимальное значение строки и индекс минимального значения}   WriteLn(i,'-я строка. Ср.ар.строки =',s[i]:5:3,        ' мин. значение = ',a[i,MinIndex]:5:3,' индекс ',MinIndex);   {записываем среднее значение на место минимального}   a[i,MinIndex] := s[i];  end;writeln; {сортировка массива средних значений s} {сортировка массива методом простых обменов ("пузырька") } for i:=1 to n-1 do   for j:=i+1 to n do     if s[i] > s[j] then begin       t := s[i];       s[i] := s[j];       s[j] := t;     end; {вывести измененную матрицу} writeln('Новая матрица:'); for i:=1 to n do   begin     for j:=1 to m do Write(a[i,j]:5:3,'  '); writeln   end; writeln; {вывести отсортированный массив средних значений} WriteLn('Отсортированный массив:'); for i:=1 to n do   Write(s[i]:5:3,'  '); WriteLn;readkey;end.
Ссылка на комментарий
Поделиться на другие сайты

Извините что отвлекаю по пустякам,но ничего не могу сделать((Тему массивы вообще не понимаю,и нам эту тему никак не объясняют(Такой уж у нас преподаватель(Ну или сказать более честно,я ничего не могу усвоить.Пожалуйста помогите решить и разобраться в двух задачах.Язык паскаль.

1.Найти произведение элементов массива, кратных 3 и 9. Размерность массива 10. Заполнение массива осуществить случайными числами от 5 до 500.

И вторая задача.

2.Составьте программу упорядочения по возрастанию элементов каждой строки двумерного массива C[1..4, 1..5]. Заполнение массива осуществить с клавиатуры.

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

magvay7

массивы вообще не понимаю,и нам эту тему никак не объясняют
Мне кажется, достаточно увидеть текст одной простой программы с массивом, чтобы понять, что это такое и как это использовать. Массив - это набор пронумерованных переменных, номера которых, когда это нужно, вычисляются, например при их переборе. Или, иначе говоря, это обычные переменные с индексами, только индексы записываются в квадратных скобках, потому что на клавиатуре маленькие цифирки внизу не напечатать.
Найти произведение элементов массива, кратных 3 и 9. Размерность массива 10. Заполнение массива осуществить случайными числами от 5 до 500.
Кратных 3 ИЛИ 9. "и" подразумевает и 3 и 9 одновременно, но кратное 9 число автоматически будет кратно 3, так что строго по условию достаточно было бы проверять кратность только 9.
var a:array[1..10]of integer; i:integer; p:real; b:boolean; beginrandomize; for i:=1 to 10 do a[i]:=5+random(496); for i:=1 to 10 do write(a[i]:5); writeln;p:=1; b:=false; for i:=1 to 10 do if (a[i] mod 3=0)or(a[i]mod 9=0) then begin p:=p*a[i]; b:=true end;writeln; if b then writeln(p:0:0) else writeln('There is not any proper number '); readlnend.
Составьте программу упорядочения по возрастанию элементов каждой строки двумерного массива C[1..4, 1..5]. Заполнение массива осуществить с клавиатуры.
const n=4; m=5;var c:array[1..n,1..m]of real; b:real; i,j,k:integer;beginfor i:=1 to n do   begin   write('Enter ',m,' numbers of the row ',i,': ');  for j:=1 to m do read(c[i,j]); readln   end; writeln;for i:=1 to n do begin for j:=1 to m do write(c[i,j]:8:0); writeln end; writeln;for k:=1 to n do for i:=1 to m-1 do for j:=1 to m-i do   if c[k,j]>c[k,j+1] then begin b:=c[k,j]; c[k,j]:=c[k,j+1]; c[k,j+1]:=b end; for i:=1 to n do begin for j:=1 to m do write(c[i,j]:8:0); writeln end; readlnend.

При вводе элементы строк разделяются пробелами, ввод строки завершается нажатием Enter.

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

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

1.Найти количество четных элементов одномерного массива. Размерность массива 20. Заполнение массива осуществить случайными числами от -50 до 50.

2.Дана прямоугольная матрица C[1..4, 1..5]. Найти строку с наибольшей суммой элементов. Заполнение массива осуществить с клавиатуры.

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

magvay7Мне кажется, достаточно увидеть текст одной простой программы с массивом, чтобы понять, что это такое и как это использовать. Массив - это набор пронумерованных переменных, номера которых, когда это нужно, вычисляются, например при их переборе. Или, иначе говоря, это обычные переменные с индексами, только индексы записываются в квадратных скобках, потому что на клавиатуре маленькие цифирки внизу не напечатать.

Кратных 3 ИЛИ 9. "и" подразумевает и 3 и 9 одновременно, но кратное 9 число автоматически будет кратно 3, так что строго по условию достаточно было бы проверять кратность только 9.

var a:array[1..10]of integer; i:integer; p:real; b:boolean; beginrandomize; for i:=1 to 10 do a[i]:=5+random(496); for i:=1 to 10 do write(a[i]:5); writeln;p:=1; b:=false; for i:=1 to 10 do if (a[i] mod 3=0)or(a[i]mod 9=0) then begin p:=p*a[i]; b:=true end;writeln; if b then writeln(p:0:0) else writeln('There is not any proper number '); readlnend.
const n=4; m=5;var c:array[1..n,1..m]of real; b:real; i,j,k:integer;beginfor i:=1 to n do   begin   write('Enter ',m,' numbers of the row ',i,': ');  for j:=1 to m do read(c[i,j]); readln   end; writeln;for i:=1 to n do begin for j:=1 to m do write(c[i,j]:8:0); writeln end; writeln;for k:=1 to n do for i:=1 to m-1 do for j:=1 to m-i do   if c[k,j]>c[k,j+1] then begin b:=c[k,j]; c[k,j]:=c[k,j+1]; c[k,j+1]:=b end; for i:=1 to n do begin for j:=1 to m do write(c[i,j]:8:0); writeln end; readlnend.

При вводе элементы строк разделяются пробелами, ввод строки завершается нажатием Enter.

Спасибо огромно теперь буду тщательно разбираться.

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

fisher21

Ребята, а вам не кажется, что ваши задачки - близнецы, так что по решению одного варианта другие сделать самим вполне в ваших силах?

Найти количество четных элементов одномерного массива. Размерность массива 20. Заполнение массива осуществить случайными числами от -50 до 50.
var a:array[1..20]of integer; i,m:integer; beginrandomize; for i:=1 to 20 do a[i]:=-50+random(101); for i:=1 to 20 do write(a[i]:4); writeln;m:=0; for i:=1 to 20 do if not odd(a[i]) then inc(m); writeln('There is ',m,' even numbers'); readlnend.
Дана прямоугольная матрица C[1..4, 1..5]. Найти строку с наибольшей суммой элементов. Заполнение массива осуществить с клавиатуры.
const n=4; m=5;var c:array[1..n,1..m]of real; p,s:real; i,j,k:integer;beginfor i:=1 to n do   begin write('Enter ',m,' numbers of the row ',i,': '); for j:=1 to m do read(c[i,j]); readln  end; writeln;for i:=1 to n do begin for j:=1 to m do write(c[i,j]:8:0); writeln end; writeln;k:=1; for i:=1 to n do begin s:=0; for j:=1 to m do s:=s+c[i,j];              if i=1 then p:=s else if s>p then begin p:=s; k:=i end end;writeln('Maximal sum ',p:0:2,' has the row ',k); readlnend.

При вводе элементы строк разделяются пробелами, ввод строки завершается нажатием Enter.

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

fisher21

Ребята, а вам не кажется, что ваши задачки - близнецы, так что по решению одного варианта другие сделать самим вполне в ваших силах?

var a:array[1..20]of integer; i,m:integer; beginrandomize; for i:=1 to 20 do a[i]:=-50+random(101); for i:=1 to 20 do write(a[i]:4); writeln;m:=0; for i:=1 to 20 do if not odd(a[i]) then inc(m); writeln('There is ',m,' even numbers'); readlnend.
const n=4; m=5;var c:array[1..n,1..m]of real; p,s:real; i,j,k:integer;beginfor i:=1 to n do   begin write('Enter ',m,' numbers of the row ',i,': '); for j:=1 to m do read(c[i,j]); readln  end; writeln;for i:=1 to n do begin for j:=1 to m do write(c[i,j]:8:0); writeln end; writeln;k:=1; for i:=1 to n do begin s:=0; for j:=1 to m do s:=s+c[i,j];              if i=1 then p:=s else if s>p then begin p:=s; k:=i end end;writeln('Maximal sum ',p:0:2,' has the row ',k); readlnend.

При вводе элементы строк разделяются пробелами, ввод строки завершается нажатием Enter.

спасибо большое

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

всем привет!

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

обратная матрица методом Seidel( Зейделя )

спасибо огромное

P.S. После почти года отсутствия я вернулся!

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

P.P.S. вот программа которая считает определитель матрицы методом Гаусса. К ней нужно добавлять обратную матрицу методом Seidel( Зейделя ), хотя можно и отдельно сделать

#include<stdio.h>#include<math.h>#include<conio.h>#include<ctype.h>#include<stdlib.h>#define NN 10int main(){clrscr();double a[NN][NN], t, det;int i, j, n, m, l;char yn;// <----Ввод квадратной матрицы---->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");	}}for(i=0; i<n; i++)	det *= a[i][i];printf("определитель =: %14.3f", det);det = pow(-4, 1.01);printf("\n определитель =: %14.3f", det);getch();return det;}
Ссылка на комментарий
Поделиться на другие сайты

Всем Привет!

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

Задача:

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

Вот пример нашел, но не запускается:

//Метод простой итерации решения СЛАУ#include <stdio.h>#include <conio.h>#include <math.h>const n = 5;float A[n][n] = {				{ 79.2,   0,  35, 19.8,  24 },				{ 39.6,  85,   0, 19.8,  25 },				{ 19.8, -15,  45,    0,  10 },				{ 49.5,  18,  20, 89.1,   0 },				{  9.9,  15,  20,-49.5,  95 },				};float  B[n]  = { 86, 55, 77, 5, -64};float  X[30][n] = {0};float  TEST[n];   float  summ;float  eps;int    k = 0;bool ExitFunc(float eps){   if(k == 0) return true;   for(int i=0; i<n; i++){   if( fabs(X[k][i]-X[k-1][i]) > eps )       return true;          }return false;      }void main(void){	printf("Enter eps:");   scanf("%f",&eps);do {for(int i=0; i<n; i++)            {       summ = 0;       for(int j=0; j<n; j++)          if(i!=j)             summ += A[i][j] * X[k][j];			   		    	X[k+1][i] = (1/A[i][i]) * (B[i] - summ);				}   k++;    }while(ExitFunc(eps));//Проверка   printf("\nResult:\n");   for(int j=0; j<n; j++)   printf("%4.8f   ",X[k][j]);    printf("\nTest:\n");for(int i=0; i<n; i++)    {    for(int j=0; j<n; j++)	   TEST[i] +=(A[i][j] * X[k][j]);	printf("%4.8f  ", TEST[i]);	}printf("\nIterations:\n%i",k);	   getch();}
Ссылка на комментарий
Поделиться на другие сайты

andre!

Он же пишет, почему не запускается. Замени const n = 5; на const int n = 5; и void main(void)на main(void)

Спасибо за ответ, но вот у меня где выдает ошибку:

http://s7.directupload.net/images/111127/ij9q8po2.png

http://s7.directupload.net/images/111127/xjsmpkka.png

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

andre!

Спасибо за ответ, но вот у меня где выдает ошибку:...
Не вижу тут ошибки, может быть, какой-то недопустимый знак вместо пробела? В исходнике пробела не было. Попробуй перепечатать заголовок функции заново. У меня в DEv-C++ компилируется и выдает результаты.

Radu

Яндекс пока работает. Посмотри, такой распространенный метод наверняка найдется в готовом виде. Например, тут...

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

andre!Не вижу тут ошибки, может быть, какой-то недопустимый знак вместо пробела? В исходнике пробела не было. Попробуй перепечатать заголовок функции заново. У меня в DEv-C++ компилируется и выдает результаты.

Radu

Яндекс пока работает. Посмотри, такой распространенный метод наверняка найдется в готовом виде. Например, тут...

спасибо

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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