До экзамена 1 день... Горю. Плиз, хелп!

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
ELVIN
Сообщения: 4
Зарегистрирован: 19 янв 2008, 19:06

Ребят, кому не сложно, есть 3 задачи, с решением. но решение с ошибками... Не знаю, что делать. Остался день до экзамена. Выручайте. 288-180-481. Постучите плиз!
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

Это надо прежде всего тебе, поэтому выкладывай условия задач и сам код.
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
ELVIN
Сообщения: 4
Зарегистрирован: 19 янв 2008, 19:06

задача198. Даны натуральные числа n, b0...,bn. Вычислить f(b0)+f(b1)+...+f(bn), где

f(x)= 1) x в квадрате, если x кратно 3; 2) x, если х при делении на 3 дает остаток 1; 3) x/3 в остальных случаях.


program N198;
const max=100;
type matr=array [1..max] of integer;
var
mas,f:matr;

begin
write('Vvedite n');
readln(b);
end;

s:=0;
for i:=0 to n do begin

if(masmod3)=0 then begin
f:=mas*mas
else
if(masmod3)=1 then f:=mas
else
f:=mas div3;
writeln(f[i]);
for i:=1 to n do
s:=s+f[i];
writeln(s);
end;
end.
drummer
Сообщения: 61
Зарегистрирован: 13 янв 2008, 18:43

Кто вас код так учит писать?

Код: Выделить всё

var a,f : array[0..100] of longint;
    i,s,n : longint;

procedure input;
  begin
       readln(n);
       for i := 0 to n do
           read(a[i]);
  end;

procedure done;
  begin
        s := 0;
        for i:=0 to n do
           begin
               if a[i] mod 3=0
                 then  f[i] := sqr(a[i])
                 else
                      if a[i] mod 3=1
                        then  f[i] := a[i]
                        else  f[i] := a[i] div 3;
               inc(s,f[i]);
           end;
  end;

procedure output;
   begin
        writeln(s);
   end;

begin
     input;
     done;
     output;
end.
Это если в задачи под x/3 подразумевалось целая часть.
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Вот вариант с одним массивом:
[syntax='delphi']
program N198;
const max=50;
type matr=array [1..max] of integer;
var
mas:matr;
s:integer;
i:integer;

begin
{----секция заполнения-------}
{ можно заменить на
for i:=1 to max do
readln(mas);
}
randomize;
writeln('SrcData');
for i:=1 to max do
begin
mas:=random(50);
write(mas,' ');
end;
{-------секция заполнения------}
writeln;

writeln('Result'); {можно убрать}
s:=0;
for i:=1 to max do
begin
case (mas mod 3) of
0:mas:=sqr(mas);
1:mas:=mas;
else mas:=mas div 3;
end;{case}
write(mas[i],' '); {можно убрать}
end;

writeln;
for i:=1 to max do
s:=s+mas[i];
writeln('Sum ',s);
readln;
end.
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
drummer
Сообщения: 61
Зарегистрирован: 13 янв 2008, 18:43

Вариант без массива :

Код: Выделить всё

var
    i,s,n,x : longint;

procedure done;
   begin
      readln(n);
      s := 0;
      for i := 0 to n do
          begin
                read(x);
                case x mod 3 of
                  0: s := s + x*x;
                  1: s := s + x;
                  2: s := s + x div 3;
                end;
          end;
      writeln(s);
   end;

begin
       done;
end.

ELVIN
Сообщения: 4
Зарегистрирован: 19 янв 2008, 19:06

Большое спасибо! Вот задача 2.

Дана деийствительная матрица размера n*18. найти значение наибольшего по модулю элемента матрицы, а так же индексы какого нибудь элемента с найденным значением модуля. (При решении использовать процедуры)

Помогите пожалуйста.
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Можно примерно так:
[syntax='delphi']
program matr;

const
N=20;
N0=18;
var m:array[1..N]of array[1..N0]of real;
i,j:integer;
max:real;
maxi,maxj:integer;

procedure Init;
begin
randomize;
for i:=1 to N do
for j:=1 to N0 do
m[i,j]:=random(100);
end;

procedure display;
begin
for i:=1 to N do
begin
writeln;
for j:=1 to N0 do
write(m[i,j]:2:0,' ');
end;
writeln;
end;

procedure findmax;
begin
for i:=1 to N do
for j:=1 to N0 do
if abs(m[i,j])>max then max:=abs(m[i,j]);
end;

procedure FindElement;
begin
for i:=1 to N do
for j:=1 to N0 do
begin
if abs(m[i,j])=max then
begin
maxi:=i;
maxj:=j;
end;
end;

end;

begin
init;
display;
findmax;
findelement;

writeln('Max = ',max:0:5);
writeln('Положение элемента ',maxj,'*',maxi);
readln;
end.
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
ELVIN
Сообщения: 4
Зарегистрирован: 19 янв 2008, 19:06

Большое всем спасибо, выручили! :)
Ответить