Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2009, 19:14   #1
Branbal
Заблокирован
 
Регистрация: 10.11.2009
Сообщений: 20
Восклицание

1)Составить вектор из номеров строк матрицы, где содержатся числа с одинаковой разрядностью.

Вот программа, почему-то всегда выдает в конце число 4. В чем ошибка?


Код:
Program N1;
Uses CRT;
Var A: array [1..10,1..10] of integer;
R,m,n,I,J,Z,S,k,l: integer;
B:array [1..10] of integer;
F:Boolean;
Begin readln(n,m);
For I:=1 to m do 
For J:=1 to n do
Read (A[I,J]);
k:=0;
For I:=1 to m do
Begin F:=false; Z:=A[I,1];R:=0
end;
While Z<>0 do
Begin R:=R+1; Z:=Z div 10
end;
For J:=2 to n do
Begin S:=A[I,J];l:=0;
While S<>0 do
Begin l:=L+1;S:=S div 10
end;
If R=l then 
Begin k:=k+1;B[k]:=I
end;
For I:=1 to k do
writeln (B[I]);
readkey
end.
Ну народ кто помочь может?((( Сколько уже переделываю....Все никак.

Последний раз редактировалось Stilet; 25.11.2009 в 14:42.
Branbal вне форума Ответить с цитированием
Старый 24.11.2009, 02:35   #2
Rusl92
Форумчанин
 
Аватар для Rusl92
 
Регистрация: 30.03.2008
Сообщений: 392
По умолчанию

Код:
Program N1;
Uses CRT;
Var A: array [1..10,1..10] of integer;
     B:array [1..10] of integer;
     F:Boolean;
     n,m,i,j,b,k1,k2,g,flag:integer;
Begin 
   g:=0;//количество элементов в векторе
   readln(m,n);
   For I:=1 to m do 
    begin
     For J:=1 to n do
      Read (A[I,J]);
     Readln
    end;
  For I:=1 to m do
   Begin
       b:=A[i,1];
       k1:=0;
       while abs(b)>0 do // модуль b
        begin
         b:=b div 10;
         inc(k1);
        end;
        flag:=1;
        j:=2;
        while (j<=n) and (flag=1) do
         Begin
          b:=A[I,J];
          k2:=0;
          while abs(b)>0 do
            begin
             b:=b div 10;
             inc(k2);
            end;
           if k2=k1 
            then
             Begin g:=g+1;B[g]:=I end
            else flag:=0;{ так как не нужно больше смотреть,
                               уже хотя бы одно число отличается
                               разрядностью от первого}
          j:=j+1; 
          end;
       end; 
    For I:=1 to g do
     writeln (B[i]);
  readln
end.
вот рабочий код!
внимательно посмотри - когда хотя бы одно число отличается разрядностью от первого, мы должны флажку присвоить значение 0. При следующей итерации условие не выполнится, и на этом проверка этой строки завершиться!
Программирование - это великое искусство... Такое же как например и живопись!
Rusl92 вне форума Ответить с цитированием
Старый 25.11.2009, 14:33   #3
Branbal
Заблокирован
 
Регистрация: 10.11.2009
Сообщений: 20
По умолчанию

Огромное спасибо, в общем виде уже вышло, почти. Я проверял на матрице 3х3, результат выдает только дублированный, например 1133, как от этого избавиться? И еще вопрос, "flag" можно заменить на другую переменную? скажем "S" ? +inc(k1) как я понял это запоминание данного действия?
Осталось чуть совсем исправить, в целом спасибо, а то у меня ну никак ничего похожего не выдавало даже....

Помогииите :D Оно дублируется, не пойму почемууу!!!

Код:
Program N1;
Uses CRT;
Var A: array [1..10,1..10] of integer;
     B:array [1..10] of integer;
     F:Boolean;
     n,m,i,j,b,k1,k2,g,flag:integer;
Begin 
   g:=0;//количество элементов в векторе
   readln(m,n);
   For I:=1 to m do 
    begin
     For J:=1 to n do
      Read (A[I,J]);
     Readln
    end;
  For I:=1 to m do
   Begin
       b:=A[i,1];
       k1:=0;
       while abs(b)>0 do // модуль b
        begin
         b:=b div 10;
         inc(k1);
        end;
        flag:=1;
        j:=2;
        while (j<=n) and (flag=1) do
         Begin
          b:=A[I,J];
          k2:=0;
          while abs(b)>0 do
            begin
             b:=b div 10;
             inc(k2);
            end;
           if k2=k1 
            then
             Begin g:=g+1;B[g]:=I end
            else flag:=0;{ так как не нужно больше смотреть,
                               уже хотя бы одно число отличается
                               разрядностью от первого}
          j:=j+1; 
          end;
       end; 
    For I:=1 to g do
     writeln (B[i]);
  readln
end.
В чем ошибка??? Почему ответ дублируется??? Я заменил b на k (программа требовала), убрал Readln лишние, но почему ответ мне пишет "1133" вместо "13" ????

Нарооод ну помогите плз еще)

Последний раз редактировалось Stilet; 26.11.2009 в 08:37.
Branbal вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
паскаль ,матрица Ам тя Помощь студентам 2 17.11.2009 03:53
Паскаль.Матрица valis Помощь студентам 2 14.11.2009 13:01
Паскаль - Матрица Dog Помощь студентам 2 02.10.2009 10:09
Паскаль матрица!!!!! Igomax Помощь студентам 3 07.06.2009 16:20
матрица паскаль telle Помощь студентам 2 28.05.2009 01:01