Помощь - Поиск - Пользователи - Календарь
Полная версия: Две задачки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Predator04
Помогите кто может решить двезадачки

Задача №1
В одномерном массиве целых чисел определить количество нечетных элементов менших константы С.

Задача №2
Дано двухмерный массив действительных чисел. Определить номер строки, в которой находиться максимальное число, а также номер столбца, в котором находиться минимальное число массива. Если индексы кратные, то заменить диагональные элементы массива единицей.
APAL
Задачки очень простые.

Попробуй сначала посмотреть здсь: http://forum.pascal.net.ru/index.php?showtopic=2694

Если не поможет - задавай здесь более конкретные вопросы, объясни что вызывает трудности.
Predator04
Уменя есть вариант первой задачи но он не работает.

Код

Program zada4a1;
Const
C = 5;
Max = 10;
Var
a : array[0..Max] of Integer;
i : Byte;
Res : Integer;

Procedure InputMass(Var a : array of integer);
begin
Randomize;
WriteLn('Zadannii massiv ==>');
For i := 1 to Max do
begin
a[i] := Random(10);
Write(a[i] : 3);
end;
end;

Procedure Calculate(a : array of Integer; Var Res : Integer);
begin
for i := 1 to Max do
if (a[i] mod 2) <> 0 then
if a[i] < C then
inc(Res);
end;

begin
InputMass(a);
Calculate(a,res);
WriteLn('Kol-vo elementov ===> ',Res);
end.
volvo
Во-первых, почему именно процедура? С функцией не было бы проще?

Function Calculate(var a : array of Integer): Integer;
var
  i: integer;
  res: integer;
begin
  res := 0;
  for i := 0 to Max do
    if Odd(a[i]) and (a[i] < C) then inc(Res);
  Calculate := res;
end;

А потом использовать вот так:
begin
InputMass(a);
WriteLn('Kol-vo elementov ===> ',Calculate(a));
end.


Ну, и потом: ты описываешь массив A как массив с индексами [0 .. Max], а при его вводе в процедуре Input почему-то нулевой элемент игнорируешь (да и в Calculate тоже)...
Romtek
  1. никогда не объявляй имена глобальных переменных, что и локальные.
  2. переменные цикла НИКОГДА не объявляй глобальными. Это ведёт к необъяснимым ошибкам.
  3. переменной Res не задано начальное значение. Это ведёт к необъяснимым ошибкам. Твоё счастье, что компилятор позаботился об обнулении переменной. Это верно лишь для некоторых типов...
Итак, правильным кодом будет

Program zada4a1;

Const 
    C =   5;
    Max =   10;

Var 
    M :   array [0..Max] Of Integer;
    Result :   Integer;

Procedure InputMass(Var a : Array Of integer);
var
     i: integer;
Begin
    Randomize;
    Write ('Zadannii massiv ==>');
    For i := 1 To Max Do
        Begin
            a[i] := Random(10);
            Write(a[i] : 3);
        End;
End;

Procedure Calculate(a : Array Of Integer; Var Res : Integer);
var
     i: integer;
Begin
    For i := 1 To Max Do
        If (a[i] Mod 2) <> 0 Then
            If a[i] < C Then
                inc(Res);
End;

Begin
    InputMass (M);
    Calculate (M, Result);
    WriteLn;
    WriteLn ('Kol-vo elementov ===> ', Result);
    readln;
End.

Romtek
В целом, структура программы продумана хорошо, это уже радует. Ещё небольшой совет, но очень полезный: делай отступы в программе - так на порядок лучше следить за вложеными циклами, и, к тому же, увеличивается читабельность программы. ;)
Predator04
Начало второй задачи.
Код

var
   A array[1..x,1..y] of real
   Max,Min:Real;
   i,j,Str,Sto:integer
   Max:=A[1,1];
   Min:=A[1,1];
   Str:=1;
   Sto:=1;
   for i:=1 to x do
   for j:=1 to y do
begin
       if A[i,j]>Max then
begin
       Max:=A[i,j];
       Str:=i
end;
       if A[i,j]<Min then
begin
       Min:=A[i,j];
       Sto:=j
end;
end;
volvo
Predator04, ты вообще читаешь, что тебе пишут?
Цитата(Romtek)
Ещё небольшой совет, но очень полезный: делай отступы в программе

Вот и делай отступы !!! Твои программы ОЧЕНЬ СЛОЖНО читать...
AruNimotsi
Код

var
  A array[1..x,1..y] of real
  Max,Min:Real;
  i,j,Str,Sto:integer
 
BEGIN // обычно бегин ставят в начале проги и поаккуратней с синтаксисом

 
for i:=1 to x do   // затем надо бы задать сам массив
  for j:=1 to y do
   readln(A[i,j]);


  Max:=A[1,1];
  Min:=A[1,1];
  Str:=1;
  Sto:=1;

for i:=1 to x do
  for j:=1 to y do
    if A[i,j]>Max then
      begin
         Max:=A[i,j];
         Str:=i;
      end;
    if A[i,j]<Min then
      begin
        Min:=A[i,j];
        Sto:=j;
      end;

END.


дальше помочь не могу - некоректное условие если кратны - ЧЕМУ???
да и вообщемто я думаю остаток программы сможешь и сам дописать
не исключаю ошибок и в моем тексте однако паскаля под рукой нету писал в нотепаде а сам не програмил лет шесть уж...
volvo
AruNimotsi, давай все-таки проверять программы перед тем, как постить!
Цитата(Правила раздела)
6. Проверяйте программы перед тем, как запостить их!!!


У тебя же из-за синтаксиса уже на второй строке вылетит ошибка.
Цитата
некоректное условие если кратны - ЧЕМУ???
Все корректно, кратны друг другу.
AruNimotsi
Спасибо учту :D

замена диаганальных элементов еденицами:



for i:=1 to n
for j:=1 to n
  begin
       if i=j then A[i,j]:=1;
       if -1*(n-i)=j then A[i,j]:=1;
  end; //  n - кол-во строк(столбцов)



;)
volvo
blink.gif
А это зачем?
if -1*(n-i)=j then A[i,j]:=1;
? Для замены элементов побочной диагонали? Так оно не сработает, потому что n всегда больше i, а j отрицательным быть не может...

Вот правильный вариант:
for i:=1 to n do begin
  a[i, i] := 1; a[i, n-i+1] := 1;
end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.