const n=3;
type arstr=array[1..n]of string;
var i,j,k: integer;
mas: arstr;
procedure readmas (var mas:arstr);
var i:integer;
begin
writeln('Введите строки:');
for i:=1 to n do
begin
write('Строка №',i,': ');
readln(mas);
end;
end;
procedure inputK (var k:integer);
var kchar:char;
begin
writeln ('Введите литеру'); readln(kchar);
k:=ord(kchar);
end;
procedure sortmid(var mas:arstr;n,k:integer);
var i,j:integer;
h:string;
ci,cj:char;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
begin
if length(mas)>=k then
ci:=mas[i,k]
else
ci:=' ';
if length(mas[j])>=k then
cj:=mas[j,k]
else
cj:=' ';
if ci>cj then
begin
h:=mas;
mas:=mas[j];
mas[j]:=h;
end
end;
end;
begin {main}
{обращение к русскому языку}
setconsoleCp(1251);
setconsoleOutputCp(1251);
{ввод}
readmas(mas);
inputK (k);
{обработка}
sortmid(mas,n,k);
{вывод}
readln;
end.
Поправить исходники [Pascal]
Напишите процедуру sortmid, которая сортировала бы ряд из п строк в алфавитном порядке, основываясь
на к-ой литере каждой строки, к является параметром, передаваемым процедуре sortmid. Например, если к=3,
то элементы ряда должны быть отсортированы по возрастанию значения в третьей литере каждой строки.
Если длина строки меньше к, то будем предпологать, что его к-й литерой, реально не существующей, служит пробел.
Решение
Чево неправильно и как вывести ответ?
Код:
Задача 2
Пусть дана вещественная матрица порядка п. Постройте последовательность веществ чисел а1,...,ап по правилу: если в i-й строке
матрицы элемент, принадлежащий главной диагонали, отрицателен, то элемент аi равен сумме положительных элементов i-й строки, в противном случае аi равен произведению отрицательных элементов i-й строки.
Решение
Привести в божеский вид (оптимизировать)
Код:
const n=2;
type matr=array [1..n,1..n] of real;
mas= array [1..n] of real;
var i: integer;
a: mas; //искомая последовательность
x: matr; //матрица
procedure readmatr (var x:matr); //процедура ввода матрицы
var i,j:integer;
begin
writeln ('Введите матрицу положит и отриц чисел');
for i:=1 to n do
for j:=1 to n do
read(x[i,j]);
readln;
end;
procedure build (x:matr;var a:mas); //процедура построения последовательноста
var i,j,k:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
if (i=j) and (x[i, j]<0) then //для отриц чисел
begin
a:=0;
for k:=1 to n do
if x[i, k]>0 then
a:=a+x[i, k];
end;
if (i=j) and (x[i,j]>0) then //для положит чисел
begin
a:=1;
for k:=1 to n do
if x[i, k]<0 then
a:=a*x[i, k];
end;
end;
end;
end;
begin {main}
{обращение к русскому языку}
setconsoleCp(1251);
setconsoleOutputCp(1251);
{ввод}
readmatr(x);
{обработка}
build(x,a);
{вывод}
writeln;
writeln ('Ответ:');
for i:=1 to n do
begin
write('a[',i,']=');
writeln (a:4:2);
end;
readln;
end.
type matr=array [1..n,1..n] of real;
mas= array [1..n] of real;
var i: integer;
a: mas; //искомая последовательность
x: matr; //матрица
procedure readmatr (var x:matr); //процедура ввода матрицы
var i,j:integer;
begin
writeln ('Введите матрицу положит и отриц чисел');
for i:=1 to n do
for j:=1 to n do
read(x[i,j]);
readln;
end;
procedure build (x:matr;var a:mas); //процедура построения последовательноста
var i,j,k:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
if (i=j) and (x[i, j]<0) then //для отриц чисел
begin
a:=0;
for k:=1 to n do
if x[i, k]>0 then
a:=a+x[i, k];
end;
if (i=j) and (x[i,j]>0) then //для положит чисел
begin
a:=1;
for k:=1 to n do
if x[i, k]<0 then
a:=a*x[i, k];
end;
end;
end;
end;
begin {main}
{обращение к русскому языку}
setconsoleCp(1251);
setconsoleOutputCp(1251);
{ввод}
readmatr(x);
{обработка}
build(x,a);
{вывод}
writeln;
writeln ('Ответ:');
for i:=1 to n do
begin
write('a[',i,']=');
writeln (a:4:2);
end;
readln;
end.
Задача 3
Дан фрагмент:
Код:
type
число = 1..31;
месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек);
день_недели = (вс, пн, вт, ср, чт, пт, сб);
var
d:число;
m:мечяц;
wd1, wd:день_недели;
k:0..12;
число = 1..31;
месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек);
день_недели = (вс, пн, вт, ср, чт, пт, сб);
var
d:число;
m:мечяц;
wd1, wd:день_недели;
k:0..12;
Считая, что год високосный и его 1 января приходится на день недели wd1, определите:
wd - день недели, на который приходиться день с датой d, m.
Тут не совсем втыкнул, как сделать, если не трудно напишите.
Заранее благодарен!
___________________________________________________
Я академиев не кончал, но высшее образование вам даду!
Код:
procedure build (var x:matr;var a:mas); //процедура построения последовательноста
var i,j,k:integer;
begin
for i:=1 to n do
begin
if x[i,i]<0 then
for k:=1 to n do
if x[i, k]>0 then
a:=a+x[i, k]
else
//для положит чисел
begin
a:=1;
for k:=1 to n do
if x[i, k]<0 then
a:=a*x[i, k];
end
end
end;
var i,j,k:integer;
begin
for i:=1 to n do
begin
if x[i,i]<0 then
for k:=1 to n do
if x[i, k]>0 then
a:=a+x[i, k]
else
//для положит чисел
begin
a:=1;
for k:=1 to n do
if x[i, k]<0 then
a:=a*x[i, k];
end
end
end;
ps если что пардон - begin endы я не считал ))
Ошибка в исходных данных. Процедура inputK возвращает в
параметре k неверное число. При вводе 3 она вернет код символа '3', т.е. 51. Лучше переписать ее так:
procedure inputK (var k:integer);
begin
writeln ('Введите номер литеры'); readln(k);
end;
Вывод результата:
procedure outputmas(var mas:arstr;n,k:integer);
var i:integer;
begin
writeln('Результат:') ;
for i:=1 to n do
writeln(mas);
writeln('Press enter to continue...');
readln;
end;
Код:
procedure build (var x:matr;var a:mas); //процедура построения последовательноста
var i,j,k:integer;
begin
for i:=1 to n do
begin
if x[i,i]<0 then
begin
for k:=1 to n do
if x[i, k]>0 then
begin
a:=0;
a:=a+x[i, k]
end;
end
else
begin
a:=1;
for k:=1 to n do
if x[i, k]<0 then
a:=a*x[i, k];
end
end
end;
var i,j,k:integer;
begin
for i:=1 to n do
begin
if x[i,i]<0 then
begin
for k:=1 to n do
if x[i, k]>0 then
begin
a:=0;
a:=a+x[i, k]
end;
end
else
begin
a:=1;
for k:=1 to n do
if x[i, k]<0 then
a:=a*x[i, k];
end
end
end;
Задача 3
Дан фрагмент:
Код:
type
число = 1..31;
месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек);
день_недели = (вс, пн, вт, ср, чт, пт, сб);
var
d:число;
m:мечяц;
wd1, wd:день_недели;
k:0..12;
число = 1..31;
месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек);
день_недели = (вс, пн, вт, ср, чт, пт, сб);
var
d:число;
m:мечяц;
wd1, wd:день_недели;
k:0..12;
Считая, что год високосный и его 1 января приходится на день недели wd1, определите:
wd - день недели, на который приходиться день с датой d, m.
______
В голове должны быть мышцы.
считаем число дней сколько прошло с начала года (дату и сколько дней в каждом месяце мы знаем)
ну а потом можно взять это число по модулю 7 и сдвинуть на начальную дату (тоже mod 7)
это не алгоритм а набросок )