Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ единичность матрицы и 3 одинаковые цифры

Автор: LP.by 10.01.2007 4:01

нада срочна 2 задачки,
1. Дана квадратная матрица А, порядка n. Проверить является ли она единичной.
вот я к ней цикл сделал:


for i : = 1 to n do
if a[i,i] = 1 then begin
a[i,i] : = 0;
for j : = 1 to n do
if a[i,j] <> 0 then begin
Writeln('matriza edini4na')
else
Exit;


плз нада её аформить.

2. Дано n-значное число Р. Верно ли что оно содержит 3 одинаковые цифры??

а па поваду втарой задачки я не знаю blink.gif

Автор: мисс_граффити 10.01.2007 4:08

1. blink.gif хочешь сказать, что это правильно работает?
да и вообще... какое ты имеешь право менять матрицу?

2. n заранее известно? или как повезет?
чем можно пользоваться? строки, массивы...

Автор: LP.by 10.01.2007 4:13

1. эт мне препод сказал пройтись таким циклом. smile.gif
2. n неизвестно(вводится вручную), а пользоваться па ходу массивами

Автор: volvo 10.01.2007 4:14

Цитата(LP.by @ 9.01.2007 23:01)
1. Дана квадратная матрица А, порядка n. Проверить является ли она единичной.
вот я к ней цикл сделал:

Вот так делай:
begin
ok := true;

for i := 1 to n do
for j := 1 to n do
ok := ok and
(((i = j) and (a[i, j] = 1)) or ((i <> j) and (a[i, j] = 0)));

writeln(ok);
end.

P.S. Препода - на мыло...

Автор: мисс_граффити 10.01.2007 4:35

1. Как вариант - с циклом while, чтобы остановить проверку, как только попадется нарушающий единичность элемент.

Цитата
Препода - на мыло...

имхо, все было не совсем так...

2. число 333666 будет считаться содержащим 3 одинаковые цифры?
а 33334?

Автор: LP.by 10.01.2007 4:52

Цитата(мисс_граффити @ 9.01.2007 23:35) *

2. число 333666 будет считаться содержащим 3 одинаковые цифры?
а 33334?


333666, 3 тройки и 3 шестёрки, в моём представлении - да
33334, опять же в "моём представлении" - нет
и это всё не оговарено в условии задачи, так что эт уже на выбор того кто пишет прогу

Автор: мисс_граффити 10.01.2007 5:18

ну, для небольших чисел:

program cifri;
var chislo:longint;
i:byte; {при желании, можно и без нее обойтись... но для наглядности пусть будет}
ar: array[0..9]of integer; {сюда будем записывать, сколько раз встречаются цифры}
begin
for i:=0 to 9 do {обнуляем массив}
ar[i]:=0;
writeln('chislo?');
readln(chislo);
while chislo>0 do {выделяем разряды и считаем}
begin
inc(ar[chislo mod 10]);
chislo:=chislo div 10;
end;
i:=0;
while (i<9) and (ar[i]<>3) do
inc(i);
if ar[i]=3 then
writeln('YES!!!')
else
writeln('NO!!!');
readln;
end.

числа типа 000123 заменяются на 123, то есть считается, что 3 одинаковых нет

Автор: LP.by 10.01.2007 5:56

всё, всем псб good.gif

Автор: LP.by 10.01.2007 19:40

to мисс_граффити
Извени, прост я тороплюсь.Поэтому создал новую тему 10.gif

Вот что с тем кодом, который выше, сделали мои кривые ручки :


uses
crt;
type
gas=Array[1..10,1..10] of integer;
var
ok:boolean;
i,n,j:byte;
a:integer;
Begin
clrscr;
Writeln('vvedite n');
readln (n);
for i:=1 to n do
for j:=1 to n do
readln(a[i,j]);
end;
begin
ok := true;

for i := 1 to n do
for j := 1 to n do
ok := ok and
(((i = j) and (a[i, j] = 1)) or ((i <> j) and (a[i, j] = 0)));

writeln(ok);
end.
readkey;
end.



как видно, он тоже не работает

Автор: Malice 10.01.2007 19:45

А почему а - integer ?

Автор: мисс_граффити 10.01.2007 19:46

я вижу, что она не компилируется.
...что вполне естественно:


a:integer;
...
readln(a[i,j]);

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

тогда не забывай про директиву компилятора {$Telephaty} (подключает поддержку телепатии). Тогда переменные можно вообще не объявлять...

Автор: LP.by 10.01.2007 19:54

type
mas=Array[1..10,1..10] of integer;
...
a:mas;


вроде так???

Автор: мисс_граффити 10.01.2007 19:57

да вроде....
убери еще непонятно зачем нужное сочетание

end;
begin
в середине программы...

Автор: LP.by 10.01.2007 20:03

бальшое спс good.gif