Помощь - Поиск - Пользователи - Календарь
Полная версия: НАЙДИТЕ ПЛИЗ ОШИБКУ
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Neon6868
Задание внизу на фотке!!!!!!!!!!
(Надо делать задание 2.3!!!)
Программа должна поменять 2 строки текста.Но она почему-то ничего не меняет!!!!! angry.gif
Вот программа:
Program DP;
   const
    d=250;
    n=10;
    k=25;
   type
    st=string[d];
    ptrstr=^st;
    mytext=array [1..n] of ptrstr;
    t2=^mytext;
   var
    i,j:integer;
    t:t2;
    t1:text;
Procedure Myswap(var t:t2;i,j:integer);
   var
    a:ptrstr;
   Begin
    a:=t^[i];
    t^[i]:=t^[j];
    t^[j]:=a;
   End;
Begin
    assign(t1,'G:\abc.txt');
    reset(t1);
    new(t);
    writeln;
    for i:=1 to n do t^[i]:=nil;
    for i:=1 to n do
   begin
    writeln;
    for j:=1 to k do
   begin
    read(t1,t^[i]^[j]);
    write(t^[i]^[j]);
   end;
    close(t1);
   end;
    writeln;
    writeln('Vvedite i-uyu stroky matrici:');
    readln(i);
    writeln('Vvedite j-uyu stroky matrici:');
    readln(j);
    reset(t1);
    myswap(t,i,j);
    writeln('Preobrazovanii tekst:');
    for i:=1 to n do
   begin
    writeln;
    for j:=1 to k do
   begin
    read(t1,t^[i]^[j]);
    write(t^[i]^[j]);
   end;
   end;
   close(t1);
   dispose(t);
End.


М
Теги!
мисс_граффити

мисс_граффити
такие ошибки и компилятор прекрасно ловит:
Файл не открыт для чтения.
Сделал бы нормальное форматирование - увидел бы:
    for i:=1 to n do
      begin
      writeln;
      for j:=1 to k do
        begin
        read(t1,t^[i]^[j]);
        write(t^[i]^[j]);
        end;
      close(t1);
      end;

файл закрывается внутри цикла чтения....
мисс_граффити
вот так на некоторых файлах работает:
Program DP;
   const
    d=250;
    n=4;
    k=10;
   type
    st=string[d];
    ptrstr=^st;
    mytext=array [1..n] of ptrstr;
    t2=^mytext;
   var
    i,j:integer;
    t:t2;
    t1:text;
Procedure Myswap(var t_i,t_j:ptrstr);
   var
    a:ptrstr;
   Begin
    a:=t_i;
    t_i:=t_j;
    t_j:=a;
   End;

Begin
    assign(t1,'C:\abc.txt');
    reset(t1);
    new(t);
    writeln;
    for i:=1 to n do
      begin
      t^[i]^:='HereIsText';
      for j:=1 to k do
        read(t1,t^[i]^[j]);
      writeln(t^[i]^);
      end;
    writeln;
    writeln('Vvedite i-uyu stroky matrici:');
    readln(i);
    writeln('Vvedite j-uyu stroky matrici:');
    readln(j);
    myswap(t^[i],t^[j]);
    writeln('Preobrazovanii tekst:');
    for i:=1 to n do
      writeln(t^[i]^);
    close(t1);
    dispose(t);
    readln;
End.

Если в файле есть разбивка по строкам - могут быть проблемы...
Neon6868
Я изменил прогу а она опять не работает!!!!!
Вот прога:

Program DP;
   const
    d=250;
    n=10;
    k=25;
   type
    st=string[d];
    ptrstr=^st;
    mytext=array [1..n] of ptrstr;
    t2=^mytext;
   var
    x,y:integer;
    t:t2;
    t1:text;
    i,j:ptrstr;
Procedure Myswap(var t:t2;var i,j:ptrstr);
   var
    a:ptrstr;
   Begin
    a:=i;
    i:=j;
    j:=a;
   End;
Begin
    assign(t1,'G:\abc.txt');
    reset(t1);
    new(t);
    writeln;
    for x:=1 to n do t^[x]:=nil;
    for x:=1 to n do
   begin
    writeln;
    for y:=1 to k do
   begin
    read(t1,t^[x]^[y]);
    write(t^[x]^[y]);
   end;
   end;
    close(t1);
    reset(t1);
    writeln;
    writeln('Vvedite i-uyu stroky matrici:');
    readln(x);
    writeln('Vvedite j-uyu stroky matrici:');
    readln(y);
    myswap(t,t^[i],t^[j]);
    writeln('Preobrazovanii tekst:');
    for x:=1 to n do
   begin
    writeln;
    for y:=1 to k do
   begin
    read(t1,t^[x]^[y]);
    write(t^[x]^[y]);
   end;
   end;
   close(t1);
   dispose(t);
End.



volvo
Во-первых,

var
  x,y:integer;
  t:t2;
  t1:text;
  i,j:integer; { <--- А не то, что было ... }

иначе программа не будет даже компилироваться, не то что работать...

А во вторых, где ты присваиваешь I и J какие-нибудь значения в основной программе? Другими словами, какие элементы ты меняешь местами в Myswap, объясни?
Neon6868
i и j я ввожу с клавиатуры!!!!!
Вот переделал, но всё равно не работает!!!

Program DP;
   const
    d=250;
    n=10;
    k=25;
   type
    st=string[d];
    ptrstr=^st;
    mytext=array [1..n] of ptrstr;
    t2=^mytext;
   var
    x,y:integer;
    t:t2;
    t1:text;
    i,j:integer;
Procedure Myswap(var t:t2;var i,j:ptrstr);
   var
    a:ptrstr;
   Begin
    a:=i;
    i:=j;
    j:=a;
   End;

Begin
    assign(t1,'G:\abc.txt');
    reset(t1);
    new(t);
    writeln;
    for x:=1 to n do t^[x]:=nil;
    for x:=1 to n do
   begin
    writeln;
    for y:=1 to k do
   begin
    read(t1,t^[x]^[y]);
    write(t^[x]^[y]);
   end;
   end;
    close(t1);
    reset(t1);
    writeln;
    writeln('Vvedite i-uyu stroky matrici:');
    readln(i);
    writeln('Vvedite j-uyu stroky matrici:');
    readln(j);
    myswap(t,t^[x],t^[y]);
    writeln('Preobrazovanii tekst:');
    for x:=1 to n do
   begin
    writeln;
    for y:=1 to k do
   begin
    read(t1,t^[x]^[y]);
    write(t^[x]^[y]);
   end;
   end;
   close(t1);
   dispose(t);
End.


мисс_граффити
Извини, а чем тебя не устроил мой код?
Не спорю, простор для оптимизации есть. Но он хотя бы работает!
compiler
Цитата(Neon6868 @ 9.03.2007 20:13) *

i и j я ввожу с клавиатуры!!!!!
Вот переделал, но всё равно не работает!!!

ИМХО, ошибка в переменных... (локальные/глобальные) работать надо в этом направлении...
volvo
Здесь телепатов, чтобы разбираться, КАКОЙ у тебя входной файл - нету... Вот это работает на МОЕМ файле. Надо - бери и смотри, что я поменял, может, и переделаешь под то, что надо ТЕБЕ...

Program DP;

const
  d = 250;
  n = 10;
  k = 25;

type
  st = string[d];
  ptrstr = ^st;
  mytext = array[1 .. n] of ptrstr;
  t2=^mytext;
var
  x, y: integer;
  t: t2;
  t1: text;
  i, j: integer;

Procedure Myswap(var t:t2;var i,j:ptrstr);
var a:ptrstr;
Begin
  a:=i;
  i:=j;
  j:=a;
End;

Begin
  assign(t1,'abc.txt');
  reset(t1);
  new(t);
  writeln;

  for x:=1 to n do t^[x]:=nil;

  for x:=1 to n do begin
    new(t^[x]);
    writeln;
    for y:=1 to k do begin
      read(t1,t^[x]^[y]);
      write(t^[x]^[y]);
    end;
    readln(t1);
  end;

  close(t1);
  reset(t1);
  writeln;
  writeln('Vvedite i-uyu stroky matrici:');
  readln(i);
  writeln('Vvedite j-uyu stroky matrici:');
  readln(j);
  myswap(t,t^[i],t^[j]);
  writeln('Preobrazovanii tekst:');
  for x:=1 to n do begin
    writeln;
    for y:=1 to k do begin
      { read(t1,t^[x]^[y]); }
      write(t^[x]^[y]);
    end;
  end;
  close(t1);
  dispose(t);
End.

(предупреждаю сразу, чтоб потом ни у кого не было желания говорить об ошибке: моя программа содержит memory leak, да, я знаю... КАК исправить - знаю, но делать не буду, ибо лень... Автору лень форматировать код как положено, а мне лень убрать leak)
Neon6868
Просто в задании надо передать параметры (t,i,j) и сделать так, чтобы,если в тексте менее N строк, последние элементы массива были равны nil. Но всё равно спасибо!!! smile.gif
мисс_граффити
volvo, а можно вопрос?..
открывать сообщение или нет - на твое усмотрение.
Что тебе дает передача этого массива? Он же в процедуре не используется...
То есть что изменится, если мы напишем не так, а
Procedure Myswap(var i,j:ptrstr);
?
если я правильно поняла, будет ровно та же процедура, что у меня... только имена другие.

М
Я просто не обратил внимание на эту процедуру... Как она была, так и оставил. Можно и убрать, конечно...
volvo

Neon6868
Я файл разделил на строки и прога стала работать! Но в задании наверно надо не обрезать строки а разделить текст на строки равной длины!! Такое возможно?????
Egor Vladimirovich
Цитата(Neon6868 @ 9.03.2007 22:57) *

Я файл разделил на строки и прога стала работать! Но в задании наверно надо не обрезать строки а разделить текст на строки равной длины!! Такое возможно?????

Возможно.Просмотреть количество слов в файле,и разбить строки на равные.
Neon6868
Цитата(Egor Vladimirovich @ 10.03.2007 10:00) *

Возможно.Просмотреть количество слов в файле,и разбить строки на равные.


А как это можно сделать????
Артемий
Цитата
А как это можно сделать????

Посмотреть количество слов в файле? Ну раз ты разбивал файл на строки, ничего не будет стоить разбить строки на слова.. Вот сюда: Разбиение на слова
Neon6868
Прога теперь работает. yahoo!.gif Всем большое спасибо за помощь!!!!! 4.gif

Добавлено через 4 мин.
Цитата(Артемий2 @ 10.03.2007 13:52) *

Посмотреть количество слов в файле? Ну раз ты разбивал файл на строки, ничего не будет стоить разбить строки на слова.. Вот сюда: Разбиение на слова


Спасибо, но разбивать на слова я лучше не буду!!! smile.gif


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.