Помогите Найти Ошибку В Программе

Тема в разделе "Pascal and Delphi", создана пользователем yaroslavbondarev, 28 ноя 2011.

Статус темы:
Закрыта.
  1. yaroslavbondarev

    yaroslavbondarev Гость

    Дана целочисленная матрица {Aij}i=1...n;j=1..n , n<=100. Если в матрице есть две одинаковых строки, заменить минимальные элементы столбцов на наибольший из простых элементов матрицы. Использовать процедуры и функции!
    Код (Text):
    Program Variant3;
    uses crt;
    const l=100;
    type     matrix=array[1..l,1..l] of integer;
    var                       i,j,n:integer;
    a:matrix;
    k,s:text;
    t,f:boolean;
    procedure Vvod(var n:integer);
    var i,j:integer;
    Begin
    write('n= ');
    readln(n);
    For i:=1 to n do begin
    for j:=1 to n do begin
    read(a[i,j]);
    end;
    end;
    end;


    procedure Vyvod(n:integer);
    var i,j:integer;
    begin
    for i:=1 to n do begin
    for j:=1 to n do
    write(a[i,j]:4);
    writeln;
    end;
    end;

    function Poisk(n:integer):boolean;
    var              i,j,o:integer;
    t,f:boolean;
    Begin
    f:=false;
    for i:=1 to n-1 do begin
    for j:=i+1 to n do begin
    t:=true;
    for o:=1 to n do
    if a[i,o]<>a[j,o] then begin
    t:=false;
    break;
    end;
    if t=true then begin
    f:=true;
    break;
    end;
    end;
    end;
    Poisk:=f;
    End;

    function prost(a:integer):boolean;
    var i:integer;
    begin
    prost:=true;
    if a<2 then prost:=false
    else
    for i:=1 to round(sqrt(a)) do
    if a mod i=0 then
    begin
    prost:=false;
    break;
    end;
    end;

    procedure            Zamena (n:integer);
    var   y,stop,min,mini,max,i,j:integer;
    f:boolean;

    begin
    max:=0;
    for i:=1 to n do begin
    for j:=1 to n do
    if Prost(n)=false then
    if (max=0) or (max<a[i,j]) then max:=a[i,j];
    for j:=1 to n do begin
    min:=a[1,j];
    mini:=1;
    for i:=1 to n do
    if min>a[i,j] then begin
    minI:=i;
    min:=a[i,j];
    end;
    a[mini,j]:=max;
    end;
    end;
    end;

    Begin
    Vvod(n);
    if Poisk(n)=true then Zamena(n);
    Vyvod(n);
    End.
     
  2. yaroslavbondarev

    yaroslavbondarev Гость

    неужели никто не пожет???
     
  3. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Код (Text):
    ....
    procedure            Zamena (n:integer);
    var   y,stop,min,mini,max,i,j:integer;
    f:boolean;

    begin
    //поиск первого простого числа
    for i := 1 to n do
    for j := 1 to n do
    begin
    if prost(a[i,j])=true then
    begin
    max:=a[i,j];
    break;
    end;
    end;
    //поиск паксимального простого числа
    for i := 1 to n do
    for j := 1 to n do
    begin
    if (prost(a[i,j])=true)and(max<a[i,j]) then
    max:=a[i,j];
    end;

    for j:=1 to n do
    begin
    min:=a[1,j];
    //поиск минимума в столбце
    for i:=1 to n do
    begin
    if min>a[i,j] then
    begin
    min:=a[i,j];
    end;
    end;
    //замена минимумов в столбце на макс
    for i:=1 to n do
    begin
    if min=a[i,j] then
    begin
    a[i,j]:=max;
    end;
    end;
    end;
    end;
    ....
     
  4. Titan

    Titan Well-Known Member

    Регистрация:
    10 июн 2004
    Сообщения:
    105
    Симпатии:
    0
    yaroslavbondarev Вы, для начала, вопрос научитесь формулировать. Собственно сам вопрос в посте отсутствует как таковой.

    В чем вам помочь ? откомпилировать ? проверить скорость алгоритма ? и т.д
     
  5. yaroslavbondarev

    yaroslavbondarev Гость

    Dock1100 вставил вашу процедуру, мне минимальный элемент столбца заменяет на единицу в любом случае
     
  6. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Вы в этом уверены?
    Ибо это всё же поиск максимального.
    Код (Delphi):
    for i := 1 to n do
    for j := 1 to n do
    begin
    if (prost(a[i,j])=true)and(max<a[i,j]) then
    max:=a[i,j];
    end;
     
  7. yaroslavbondarev

    yaroslavbondarev Гость

    Titan у меня программа неправильно работает:
    Код (Delphi):
    Program Variant3;
    uses crt;
    const l=100;
    type     matrix=array[1..l,1..l] of integer;
    var                       i,j,n:integer;
    a:matrix;
    k,s:text;
    t,f:boolean;
    procedure Vvod(var n:integer);
    var i,j:integer;
    Begin
    write('n= ');
    readln(n);
    For i:=1 to n do begin
    for j:=1 to n do begin
    read(a[i,j]);
    end;
    end;
    end;


    procedure Vyvod(n:integer);
    var i,j:integer;
    begin
    for i:=1 to n do begin
    for j:=1 to n do
    write(a[i,j]:4);
    writeln;
    end;
    end;

    function Poisk(n:integer):boolean;
    var              i,j,o:integer;
    t,f:boolean;
    Begin
    f:=false;
    for i:=1 to n-1 do begin
    for j:=i+1 to n do begin
    t:=true;
    for o:=1 to n do
    if a[i,o]<>a[j,o] then begin
    t:=false;
    break;
    end;
    if t=true then begin
    f:=true;
    break;
    end;
    end;
    end;
    Poisk:=f;
    End;

    function prost(a:integer):boolean;
    var i:integer;
    begin
    prost:=true;
    if a<2 then prost:=false
    else
    for i:=1 to round(sqrt(a)) do
    if a mod i=0 then
    begin
    prost:=false;
    break;
    end;
    end;

    procedure            Zamena (n:integer);
    var   y,stop,min,mini,max,i,j:integer;
    f:boolean;

    begin
    for i := 1 to n do
    for j := 1 to n do
    begin
    if prost(a[i,j])=true then
    begin
    max:=a[i,j];
    break;
    end;
    end;
    for i := 1 to n do
    for j := 1 to n do
    begin
    if (prost(a[i,j])=true)and(max<a[i,j]) then
    max:=a[i,j];
    end;

    for j:=1 to n do
    begin
    min:=a[1,j];
    for i:=1 to n do
    begin
    if min>a[i,j] then
    begin
    min:=a[i,j];
    end;
    end;
    for i:=1 to n do
    begin
    if min=a[i,j] then
    begin
    a[i,j]:=max;
    end;
    end;
    end;
    end;

    Begin
    Vvod(n);
    if Poisk(n)=true then Zamena(n);
    Vyvod(n);
    End.
    у меня минимальный элемент столбца заменяет на единицу в любом случае, даже если ее нет в матрице

    Добавлено: Dock1100 ну вы же сами это написали, а что не так?
     
  8. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    function prost(a:integer):boolean;
    var i:integer;
    begin
    ...
    for i:=1 to round(sqrt(a)) do
    if a mod i=0 then
    begin
    prost:=false;
    break;
    end;
    end;

    Вы думаете, есть натуральное число, которое делится на 1 с остатком?

    Добавлено: round(sqrt(a)) - лучше заменить округлением квадратного корня в большую сторону :O_0:
     
  9. yaroslavbondarev

    yaroslavbondarev Гость

    все, исправил) всем спасибо! кому интересно, рабочая программа

    Код (Delphi):
    Program Variant3;
    uses crt;
    const l=100;
    type     matrix=array[1..l,1..l] of integer;
    var                       i,j,n:integer;
    a:matrix;
    k,s:text;
    t,f:boolean;
    procedure Vvod(var n:integer);
    var i,j:integer;
    Begin
    write('n= ');
    readln(n);
    For i:=1 to n do begin
    for j:=1 to n do begin
    read(a[i,j]);
    end;
    end;
    end;


    procedure Vyvod(n:integer);
    var i,j:integer;
    begin
    for i:=1 to n do begin
    for j:=1 to n do
    write(a[i,j]:4);
    writeln;
    end;
    end;

    function Poisk(n:integer):boolean;
    var              i,j,o:integer;
    t,f:boolean;
    Begin
    f:=false;
    for i:=1 to n-1 do begin
    for j:=i+1 to n do begin
    t:=true;
    for o:=1 to n do
    if a[i,o]<>a[j,o] then begin
    t:=false;
    break;
    end;
    if t=true then begin
    f:=true;
    break;
    end;
    end;
    end;
    Poisk:=f;
    End;

    function Prost(X: LongInt): boolean;
    var i: integer;
    Begin
    Prost:=false;
    if x<2 then Exit;
    if not odd(x) and (x<>2)
    then exit;
    i:=3;
    while i <= sqrt(x) do
    begin
    if x mod i = 0 then Exit;
    inc(i,2);
    end;
    Prost:=true;
    End;

    procedure            Zamena (n:integer);
    var   y,stop,min,mini,max,i,j:integer;
    f:boolean;

    begin
    for i := 1 to n do
    for j := 1 to n do
    begin
    if prost(a[i,j])=true then
    begin
    max:=a[i,j];
    break;
    end;
    end;
    for i := 1 to n do
    for j := 1 to n do
    begin
    if (prost(a[i,j])=true)and(max<a[i,j]) then
    max:=a[i,j];
    end;

    for j:=1 to n do
    begin
    min:=a[1,j];
    for i:=1 to n do
    begin
    if min>a[i,j] then
    begin
    min:=a[i,j];
    end;
    end;
    for i:=1 to n do
    begin
    if min=a[i,j] then
    begin
    a[i,j]:=max;
    end;
    end;
    end;
    end;

    Begin
    Vvod(n);
    if Poisk(n)=true then Zamena(n);
    Vyvod(n);
    End.
     
Загрузка...
Похожие Темы - Помогите Найти Ошибку
  1. OlgaZag
    Ответов:
    1
    Просмотров:
    1.292
  2. OlgaZag
    Ответов:
    0
    Просмотров:
    524
  3. Google313
    Ответов:
    0
    Просмотров:
    1.000
  4. Marikd
    Ответов:
    2
    Просмотров:
    1.210
  5. ruivit
    Ответов:
    2
    Просмотров:
    1.329
Статус темы:
Закрыта.

Поделиться этой страницей