IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Помощь по Turbo Pascal 7.0 (http://www.imho.ws/showthread.php?t=97156)

DOric 13.12.2005 04:28

Помощь по Turbo Pascal 7.0
 
Помагите пожалуйста, может это покажется не много наглостью но просто незнаю как сделать, потому прошу вашей помощи проблема такая немогу сделать программку по матрицам

ЗАДАНИЕ

Задана матрица целых чисел размером N*M НАЙТИ минимальный
СРЕДИ номеров строк ЭТОЙ матрицы, в которых находится вектор(строка), упорядоченный по возрастанию
и составленный из элементов, которые все положительны

В программе MADCAT( если правельно написал) делал матрицы, но в паскеле совсем подругому.
Спасибо тем кто сможет помочь.

Trotil 13.12.2005 10:44

Непосредственно поиск:
Код:

for y:=0 to M-1 do
begin
  flag := (a[0,y]>=0); {все хорошо то, что... }
  if flag  then            {...хорошо начинается!}
  for x:=1 to N-1 do
  if a[x,y]<a[x-1,y] then
    begin
    flag:= false; {Опять мимо... (((}
    break; {тут нам делать нечего...}
    end;
  if flag then break; {нашли все-таки? Тогда выходим из внешнего цикла досрочно}
end;
  if flag then writeln ('Строка N=',y+1) else writeln ('Строка не найдена...');


DOric 13.12.2005 11:20

Trotil
Спасибо большое, ты мне жизнь спас )) :beer:
а мона спросить а задание матриц знаеш как делает или примерно подсказать

Trotil 13.12.2005 11:23

Цитата:

а мона спросить а задание матриц знаеш как делает или примерно подсказать
Советую открыть ЛЮБОЙ учебник по TP и посмотреть. Там все написано.
В любой задачке по матрицам показано, как ее объявлять и инициализировать.
Удачи в поиске.

R.E.Mus 15.12.2005 18:03

Великий Turbo Pascal...
 
:help: Люди помогите пожалуйста в написании программы :молись: ...
Вроде не сложная :idontnow: , а не могу...
Задание: пользователь с клав-ры вводит массив, посчитать сумму чётых чисел целой части числа... :confused:
Я начало сделал а дальше ни как...
_________________________________________________________________
program r7;
uses CRT;
var X:array[1..3] of real;
Y:array[1..3] of string;
a,a1,a2,a3,l,c,h:integer;
begin
clrscr;
a1:=0;
a2:=0;
a3:=0;
for a:=1 to 3 do begin
writeln('enter array X[',a,']');
readln(X[a]);
STR(X[a],Y[a]);end;
for a:=1 to 3 do begin
delete(Y[a],16,5);end;
for a:=1 to 3 do begin
writeln('Y[',a,']=',Y[a]);
end;
for a:=1 to 3 do begin
delete(Y[a],16,5);
end;
readkey;
end.
_________________________________________________________________

Ghost 15.12.2005 18:37

Цитата:

R.E.Mus:
посчитать сумму чётых чисел целой части числа
Что это обозначает? Желательно на примере, а то я что-то не догнал краями...

Если означает, что нужно у каждого элемента массива отбросить дробную часть и просуммировать четные результы, то будет так:
Код:

s := 0;
for i := 1 to n do if (trunc (a[i]) div 2) = 0 then inc (s, trunc (a[i]));

Если нужно складывать четные цифры из целой части каждого числа, то код будет такой:
Код:

s := 0;
for i := 1 to n do begin
  p := trunc (a[i]);
  while p <> 0 do begin
    r := p mod 10;
    if (r div 2) = 0 then inc (s, r);
    p := p div 10;
  end;
end;


Trotil 15.12.2005 18:45

Код:

write(st);
val(st,x,code);
i := int(x).
count:=0;
if (code<>0) then
while (i<>0) do
  begin
        b:=i mod 10;
        if (b mod 2 = 0) then count:=count+b;
        i:=i div 10;
    end;

Вот примерчик для подсчета суммы четных цифр для одного числа.

Ghost, опередили...
Только не " if (r div 2) = 0 then inc (s, r);"
а " if (r mod 2) = 0 then inc (s, r);"

Ghost 15.12.2005 19:01

Trotil
Сенькс за поправку - как всегда глупо ошибся. В первом моем коде таже ботва: не div 2, а mod 2. Все-таки мне интересно, что конкретно имелось в виду...

R.E.Mus 15.12.2005 19:20

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

Ghost 15.12.2005 19:26

R.E.Mus
Судя по коду Trotil'а - мы с ним поняли задачу одинаково: каждый элемент массива преобразовать к целому числу и найти сумму всех четных цифр в записи получившихся целых чисел. Преобразовывать в строки ничего не надо - можно просто real преобразовывать в integer (trunc() или int()), находить остаток от деления на 10 (mod 10), делить нацело на 10 (div 10) и так до тех пор, пока число не превратиться в 0 - таким образом можно перебрать все цифры, составляющие
целое число. Дальше нужно только проверить их четность, т.е. что остаток от деления на 2 равен 0 (... mod 2 = 0) и складывать.

Trotil 15.12.2005 19:27

Тогда выбирайте любую трактовку - которая вам больше нравится.
Вопрос к вам.
В первоначальном коде:
Цитата:

delete(Y[a],16,5);
- это че такое? Зачем и какую функцию выполняет?

Ghost 15.12.2005 19:32

Цитата:

Trotil:
это че такое? Зачем и какую функцию выполняет?
Судя по всему, это попытка избавиться в представлении вещественного числа от порядка (т.е. в записи вида ' 1.00000000000023E-0001' избавиться от 'E-0001'). Или от дробной части? Во всяком случае, я так понял... :)

R.E.Mus 15.12.2005 19:39

Это грубое округление(если его можно назвать так)...Из строкового массива Y удоляем 16 символов начиная с 5...т.е если вводишь 555 паскаль пишет 5.55000000000000E2(примерно), благодоря чудесной ф-ции Он пишет 5.550000000002(по русски 5.55*10^2)

Извеняюсь за наглость но не могли-бы вы написать полный код...от program до end. Заранее благодорю... :rolleyes:

Ghost 15.12.2005 19:41

R.E.Mus
Это чересчур грубое округление. Можно было сделать так:
Код:

str (x[i]:10:6, y[i]);
Т.е. указать через ':' количество симолов на всю запись числа и на его дробную часть в строковом представлении.

З.Ы. И все-таки я угадал :)

З.Ы.Ы.
Код:

uses
  crt;
const
  n = 10;
var
  x: array [1..n] of real;
  i, p, k, s: integer;
begin
  clrscr;
  writeln ('введите массив:');
  for i := 1 to n do begin
    write ('x[', i:2, '] = ');
    readln (x[i]);
  end;
  s := 0;
  for i := 1 to n do begin
    p := trunc (x[i]);
    while p <> 0 do begin
      k := p mod 10;
      if (k mod 2) = 0 then inc (s, k);
      p := p div 10;
    end;
  end;
  writeln ('сумма четных цифр целых частей = ', s);
  writeln ('нажмите любую кнопку для выхода...');
  readkey;
end.


R.E.Mus 15.12.2005 19:47

Я использовал для подгона в основном...Но и это таже не плохо..буду знать

R.E.Mus 16.12.2005 19:31

Цитата:

Ghost:
uses
crt;
const
n = 10;
var
x: array [1..n] of real;
i, p, k, s: integer;
begin
clrscr;
writeln ('введите массив:');
for i := 1 to n do begin
write ('x[', i:2, '] = ');
readln (x[i]);
end;
s := 0;
for i := 1 to n do begin
p := trunc (x[i]);
while p <> 0 do begin
k := p mod 10;
if (k mod 2) = 0 then inc (s, k);
p := p div 10;
end;
end;
writeln ('сумма четных цифр целых частей = ', s);
writeln ('нажмите любую кнопку для выхода...');
readkey;
end.
Тут такая штучка....считает сумму чётных чисел только последней ячейки массива.

Ghost 16.12.2005 19:45

R.E.Mus
Не могет такого быть. Только что все проверил - работает. Может мы по разному воспринимаем задачу. Вот тест (для n = 3):
1. Ввожу числа 123.4, 234.5, 345.6
2. Целые части: 123, 234, 345
3. Четные цифры: в первом - 2, во втором - 2, 4, в третьем - 4
4. Сумма = 12

R.E.Mus 19.12.2005 20:05

А что-бы удалить удалить все числа от 1 до 5 из каждой ячейки массива...что надо сделать??? :confused:

AInura 08.03.2007 12:16

Можете помочь? Задача такая: Шарикб ударяясь об стенкию отскакивает. ну потом движется из стороны в сторону... ПОмогите пожалуйста:help:


Часовой пояс GMT +4, время: 08:09.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.