IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Паскаль турбо и АВСNet, Паскаль турбо и АВС.Net
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


написала программу в паскаль турбо. перенесла в паскаль авсNet /перестала работать что не так Подскажите?

uses Crt;

const
  Nmax = 100;  { Максемальное колличество элементов множества  }

type
  T = Char; {тип элемента множества}
  TSet = Array[1..Nmax] of T; { Множество}
procedure Sort(var A: TSet; const N: Integer);
var
  i, j, k: Integer;
  tmp: T;
begin
  for i := 1 to N - 1 do begin
    k := i;
    for j := i + 1 to N do
      if A[j] < A[k] then k := j;
    tmp := A[i];
    A[i] := A[k];
    A[k] := tmp;
  end;
end;

{ Ввести множество  }
procedure Set_Input(var A: TSet; var N: Integer);
var
  i, j: Integer;
  tmp: T;
  F: Boolean;
begin
  N := 0;
  while not SeekEoLn (Input) do begin 
    Inc(N);
    Read(Input, A[N]);
  end;
  Sort(A, N);
  F := False;
  i := 1;
  while i < N do begin
    if A[i] = A[i + 1] then begin
      F := True;
      Dec(N);
      for j := i + 1 to N do
        A[j] := A[j + 1];
    end
    else
      Inc(i);
  end;
  if F then WriteLn('Повторяющийся элемент удален');
end;
procedure Print(const A: TSet; const N: Integer);{Вывод множества}
var
  i: Integer;
begin
  for i := 1 to N do
    Write(A[i], ' ');
  if N = 0 then Write('Пустое множество');
  WriteLn;
end;
procedure Print_Sets(const A, B: TSet; const N, M: Integer);
var
  i: Integer;
begin
  WriteLn;
  Write('Множество A:  ');
  for i := 1 to N do
    Write(A[i], ' ');
  WriteLn;
  Write('Множество B:  ');
  for i := 1 to M do
    Write(B[i], ' ');
  WriteLn;
end;
procedure Union(var U: TSet; var k: Integer; const A, B: TSet; const N, M: Integer);
{Определение множества A и B }
var
  i, j: Integer;
begin
  i := 1;
  j := 1;
  k := 0;
  while (i <= N) or (j <= M) do
    if (j <= M) and (i <= N) and (A[i] = B[j]) then begin
      Inc(k);
      U[k] := A[i];
      Inc(i);
      Inc(j);
    end
    else if (j > M) or (i <= N) and (A[i] < B[j]) then begin
      Inc(k);
      U[k] := A[i];
      Inc(i);
    end
    else begin
      Inc(k);
      U[k] := B[j];
      Inc(j);
    end;
end;
procedure Product(var P: TSet; var k: Integer; const A, B: TSet; const N, M: Integer);
{Пересечение множеств A и B }
var
  i, j, W: Integer;
begin
  i := 1;
  j := 1;
  k := 0;
  while (i <= N) and (j <= M) do
    if (A[i] = B[j]) then begin
      Inc(k);
      P[k] := A[i];
      Inc(i);
      Inc(j);
    end
    else if A[i] < B[j] then
      Inc(i)
    else
      Inc(j);
end;
procedure Diff(var D: TSet; var k: Integer; const A, B: TSet; const N, M: Integer);
{Разность множеств  A и B}
var
  i, j: Integer;
begin
  i := 1;
  j := 1;
  k := 0;
  while (i <= N) and (j <= M) do
    if A[i] = B[j] then begin
      Inc(i);
      Inc(j);
    end
    else if A[i] < B[j] then begin
      Inc(k);
      D[k] := A[i];
      Inc(i);
    end
    else if A[i] > B[j] then
      Inc(j);
  while (i <= N) and (j > M) do begin
    Inc(k);
    D[k] := A[i];
    Inc(i);
  end;
end;
function Incl(const A, B: TSet; const N, M: Integer): Boolean; {Проверка на вхождение  A в B}
var
  i, j: Integer;
begin
  Incl := False;
  if N > M then Exit;
  i := 1;
  j := 1;
  while (i <= N) and (j <= M) and (A[i] >= B[j]) do
    if A[i] > B[j] then
      Inc(j)
    else if A[i] = B[j] then begin
      Inc(i);
      Inc(j);
    end;
  Incl := i - 1 = N;
end;
procedure Keys; {Вывод клавиш}
begin
  ClrScr;
  WriteLn('Введите номер желаемого действия:');
  WriteLn;
  WriteLn('1 - Ввод множества A');
  WriteLn('2 - Ввод множества B');
  WriteLn('3 - Проверка вхождения A в B');
  WriteLn('4 - вывести обьеденение множеств A и B');
  WriteLn('5 - Вывести пересечение множиств  A и B');
  WriteLn('6 - Вывести азность A \ B');
  WriteLn('0 - Очистка');
  WriteLn('Esc - ВЫХОД');
  WriteLn;
end;

var
  N, M, K: Integer;
  A, B, C: TSet;
  v: Char;
begin
  Keys;
  N := 0;
  M := 0;
  repeat
    v := ReadKey;
    if v in ['3'..'6'] then Print_Sets(A, B, N, M);
    case v of
      '1':
        begin
          WriteLn('Введите множество A:');
          Set_Input(A, N);
          WriteLn('Готово');
          WriteLn;
        end;
      '2':
        begin
          WriteLn('Введите множество B:');
          Set_Input(B, M);
          WriteLn('Complet');
          WriteLn;
        end;
      '3': if Incl(A, B, N, M) then WriteLn('A входит в B') else WriteLn('A Не входит в  B');
      '4':
        begin
          WriteLn('Объеденение A и B:');
          Union(C, K, A, B, N, M);
          Print(C, K);
        end;
      '5':
        begin
          WriteLn('Пересечение множеств A and B:');
          Product(C, K, A, B, N, M);
          Print(C, K);
        end;
      '6':
        begin
          WriteLn('Разность множеств A \ B:');
          Diff(C, K, A, B, N, M);
          Print(C, K);
        end;
      '0': Keys;
    end;
  until v = #27;
  end.


Сообщение отредактировано: Bajiaoxing -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


По крайней мере вы сюда скопировали с ошибкой - первой строкой ожидалось слово uses.

А так - непонятно, что такое перестала работать. Лучше уточняйте.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Цитата(Федосеев Павел @ 9.12.2016 1:19) *

По крайней мере вы сюда скопировали с ошибкой - первой строкой ожидалось слово uses.

А так - непонятно, что такое перестала работать. Лучше уточняйте.



все работает за исключением ввода А
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Смотрите. Вы вводите элементы множества до символа EoLn. Причём, SeekEoLn. Но сам символ EoLn из буфера ввода (буфера клавиатуры) не извлекаете. Это приводит к тому, что после ввода одного множества, второе ввести невозможно - while not SeekEoLn (Input) do begin сразу завершает цикл, т.к. EoLn всё ещё в буфере клавиатуры.

Извлеките этот символ - readln(input) после завершения цикла ввода перед завершением процедуры.

И ещё. Пользуйтесь кнопкой CODE и закрывайте тэг кнопкой #. Код будет выглядеть аккуратнее.
А также, воспользуйтесь программой для автоматического форматирования кода на Pascal - JCF. Здесь я описал вкратце, как его установить Форматтер кода

А так будет выглядеть ваша подпрограмма после исправления и форматирования
  { Ввести множество }
  procedure Set_Input(var A: TSet; var N: integer);
  var
    i, j: integer;
    tmp: T;
    F: boolean;
  begin
    N := 0;
    while not SeekEoLn(Input) do
    begin
      Inc(N);
      Read(Input, A[N]);
    end;
    readln(input);
    Sort(A, N);
    F := False;
    i := 1;
    while i < N do
    begin
      if A[i] = A[i + 1] then
      begin
        F := True;
        Dec(N);
        for j := i + 1 to N do
          A[j] := A[j + 1];
      end
      else
        Inc(i);
    end;
    if F then
      WriteLn('Повторяющийся элемент удален');
  end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.04.2025 3:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name