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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2008, 20:39   #1
gotex
Пользователь
 
Регистрация: 09.02.2008
Сообщений: 38
По умолчанию Паскаль. Объединение строк.

Народ, помогите плиз, если знаете, почему не работает.

Даны две строки.
задача:объёдинение символов двух строк в выходную строку, в которой символы исходных строк чередуются через один

вот код:


program LAb5_brig2;
uses crt;
const LabText = 'c:\textlab5.txt';

{__________________PROCEDURA CHTENI9____________________________ }

Procedure Chtenie(var Fname:text; var str1,str2:string);
Begin
Assign(fname, labText);
Reset(Fname);

Readln(Fname, str1);
Readln(Fname, str2);
close(fname);
Writeln ('Perva9 stroka: ', str1);
Writeln ('Vtora9 stroka: ', str2);
writeln;
end;

Procedure New_String(Var NewSTR:string; Str1:string; str2:string; N:integer; K:integer);
Var
i,t,m:integer;
begin
t:=0;
m:=1;
for i:=1 to (N+K) do begin
if odd(i) then begin
NewSTR[i]:=Str2[i-m];
inc(m);
end
else
begin
NewSTR[i]:=STR1[i-t];
inc(t);
end;
inc(i);
end;
Writeln('New String: ', NewSTR);
end;


{______________________}

Var

str1,str2,NewSTR:string;
N,K:integer;
Fname:text;
Begin

Clrscr;
Chtenie(Fname,str1,str2);
writeln;
N:=length(str1);
K:=Length(str2);
New_String(NewSTR,Str1,Str2,N,K);
readln;
end.


Строка не выходит на экран
gotex вне форума Ответить с цитированием
Старый 08.05.2008, 21:20   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

1. Не устанавливается длина строки - newStr[0] := CHR(N+K);
2. Лишний inc(i) в цикле for
alexBlack вне форума Ответить с цитированием
Старый 08.05.2008, 22:23   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот подремонтировал Вашу программу. Ошибок довольно много. Сейчас нормально работает. Вы посмотрите ее и если непонятно что, спрашивайте, желательно в пределах часа или завтра.
Код:
program LAb5_brig2;
uses crt;
const LabText = 'textlab5.txt';
type Tstr=array[1..2]of string;
var str:Tstr;
    i:integer;
    Fname:text;
    NewStr:string;
{__________________PROCEDURA CHTENI9____________________________}

Procedure Chtenie(var Fname:text; var str:Tstr);
Begin
Assign(fname, labText);
Reset(Fname);
i:=0;
while not eof(fname) do
    begin
	   i:=i+1;
     Readln(Fname, str[i]);
	   Writeln ('stroka ',i,' : ', str[i]);
    end;
writeln;
close(fname);
end;

Procedure New_String(Var NewSTR:string; Str:Tstr);
Var
n,k:integer;
begin
n:=length(str[1]);
k:=length(str[2]);
if n<=k then
   begin
     NewSTR:='';
     for i:=1 to 2*N do
     if odd(i) then
          begin
            NewSTR:=NewSTR+Str[1][i div 2+1];
          end
     else begin
            NewSTR:=NewSTR+Str[2][i div 2];
          end;
     NewSTR:=NewSTR+copy(str[2],n+1,k-n);
   end
else
   begin
     NewSTR:='';
     for i:=1 to 2*k do
     if odd(i) then
          begin
            NewSTR:=NewSTR+Str[1][i div 2+1];
          end
     else begin
            NewSTR:=NewSTR+Str[2][i div 2];
          end;
     NewSTR:=NewSTR+copy(str[1],k+1,n-k);
   end;
Writeln('New String: ', NewSTR);
end;


{______________________}

Begin
Clrscr;
Chtenie(Fname,str);
writeln;
New_String(NewSTR,Str);
readln;
end.
puporev вне форума Ответить с цитированием
Старый 08.05.2008, 22:38   #4
gotex
Пользователь
 
Регистрация: 09.02.2008
Сообщений: 38
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
1. Не устанавливается длина строки - newStr[0] := CHR(N+K);
2. Лишний inc(i) в цикле for
убрал inc, установил длину строки:

....
Procedure New_String(Var NewSTR:string; Str1:string; str2:string; N:integer; K:integer);
Var
i,t,m:integer;


begin
NewSTR[0]:=CHR(N+K);
t:=0;
m:=1;
for i:=1 to (N+K) do begin
if odd(i) then begin
NewSTR[i]:=Str2[i-m];
inc(m);
end
else
begin
NewSTR[i]:=STR1[i-t];
inc(t);
end;
end;
Writeln('New String: ', NewSTR);
end;

......

делал тесты сам на листке, считал...поидее алгоритм правильный, но выходит какаято чушь на экран((
gotex вне форума Ответить с цитированием
Старый 08.05.2008, 22:41   #5
gotex
Пользователь
 
Регистрация: 09.02.2008
Сообщений: 38
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Вот подремонтировал Вашу программу. Ошибок довольно много. Сейчас нормально работает. Вы посмотрите ее и если непонятно что, спрашивайте, желательно в пределах часа или завтра.
Код:
program LAb5_brig2;
uses crt;
const LabText = 'textlab5.txt';
type Tstr=array[1..2]of string;
var str:Tstr;
    i:integer;
    Fname:text;
    NewStr:string;
{__________________PROCEDURA CHTENI9____________________________}

Procedure Chtenie(var Fname:text; var str:Tstr);
Begin
Assign(fname, labText);
Reset(Fname);
i:=0;
while not eof(fname) do
    begin
	   i:=i+1;
     Readln(Fname, str[i]);
	   Writeln ('stroka ',i,' : ', str[i]);
    end;
writeln;
close(fname);
end;

Procedure New_String(Var NewSTR:string; Str:Tstr);
Var
n,k:integer;
begin
n:=length(str[1]);
k:=length(str[2]);
if n<=k then
   begin
     NewSTR:='';
     for i:=1 to 2*N do
     if odd(i) then
          begin
            NewSTR:=NewSTR+Str[1][i div 2+1];
          end
     else begin
            NewSTR:=NewSTR+Str[2][i div 2];
          end;
     NewSTR:=NewSTR+copy(str[2],n+1,k-n);
   end
else
   begin
     NewSTR:='';
     for i:=1 to 2*k do
     if odd(i) then
          begin
            NewSTR:=NewSTR+Str[1][i div 2+1];
          end
     else begin
            NewSTR:=NewSTR+Str[2][i div 2];
          end;
     NewSTR:=NewSTR+copy(str[1],k+1,n-k);
   end;
Writeln('New String: ', NewSTR);
end;


{______________________}

Begin
Clrscr;
Chtenie(Fname,str);
writeln;
New_String(NewSTR,Str);
readln;
end.
спасибо!
а что за команда eof и div?
gotex вне форума Ответить с цитированием
Старый 08.05.2008, 22:46   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

EOF - признак конца файла. Div - целое деление, например 4 div 2=2; 5 div 2=2; 9 div 5=1;
puporev вне форума Ответить с цитированием
Старый 08.05.2008, 22:47   #7
gotex
Пользователь
 
Регистрация: 09.02.2008
Сообщений: 38
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
EOF - признак конца файла. Div - целое деление, например 4 div 2=2; 5 div 2=2; 9 div 5=1;
Понятно) Спасибо!
gotex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение ячеек Katherina_Koval Microsoft Office Excel 3 29.07.2008 06:53
Объединение списков. life_burns Microsoft Office Excel 5 05.04.2008 16:13
Excel max 256 строк VS user надо 300 строк Exo Microsoft Office Excel 3 10.01.2008 17:14
Объединение GWT-модулей ILester JavaScript, Ajax 0 24.10.2007 14:55
Объединение заказов asale Microsoft Office Excel 6 22.10.2007 19:05