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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2013, 23:08   #1
Lamer_q2
Новичок
Джуниор
 
Регистрация: 05.12.2013
Сообщений: 2
По умолчанию Даны две строки.

Даны две строки. Пусть n1 - число слов в первой строке, а n2 - во второй (n1<n2). Добавить в конец первой строки, последние n2-n1 слов второй строки.
Набросал код, но он выдает Error: Can’t read or write variables of this type. Не подскажите что не так?
Понимаю что строка Write(a,' '); выводит массив, и поэтому поставил Write(a[i],' '); , но тогда программа выводит exitcode = 201
Что с ней не так? Или может программа неверна...

Код:
var s1,s2,t:string;
    i,j,k,n1,n2:integer;
    a: array[1..100] of string;
begin
readln(s1,s2);
i:=1;
j:=1;
n1:=length(s1);
n2:=length(s2);
 while i<=length(s1) do
  begin
  t:='';
   while (s1[i]<>' ') and (i<=length(s1)) do
    begin
    t:=t+s1[i];
    i:=i+1;
  end;
    a[j]:=t;
    j:=j+1;
    i:=i+1;
    end;
    k:=j-1;
     Write(s1,' ');
      for i:=k downto n2-n1 do
      Write(a,' ');
end.

Всем спасибо, извините за беспокойство.



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Lamer_q2; 05.12.2013 в 23:18.
Lamer_q2 вне форума Ответить с цитированием
Старый 06.12.2013, 11:10   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Код:
var s1,s2,t:string;
    i,j,k,n1,n2:integer;
    //a: array[1..100] of string;
begin
readln(s1);
readln(s2);
n1:=length(s1);
n2:=length(s2);
t:=s1;
for i:=n1+1 to n2 do
    t:=t+s2[i];
writeln(t);
end.
а если так?
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 06.12.2013, 13:55   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от SaLoKiN Посмотреть сообщение
Код:
....
n1:=length(s1);
n2:=length(s2);
....
а если так?
думаю, что "так" - не пойдёт!

Ведь n1 и n2 - это, судя по заданию, число СЛОВ в строке, а не длина, как у вас в коде.
Думаю, что тут всё чуть-чуть сложнее...


Update
впрочем, этот же "косяк" в исходном коде TC...

Последний раз редактировалось Serge_Bliznykov; 06.12.2013 в 14:06.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.12.2013, 19:33   #4
Lamer_q2
Новичок
Джуниор
 
Регистрация: 05.12.2013
Сообщений: 2
По умолчанию

Да да, именно. Этот код работает отлично если все слова имеют одинаковое количество символов.
Например:
1 строка: 123 123 123
2 строка: qwe qwe qwe qwe qwe qwe qwe
Результат: 123 123 132 qwe qwe qwe qwe

Но если слова различно длинны, то получается:
1 строка: 12 1234 123
2 строка: qwe rtyui op
Результат: 12 1234 123p

Подскажите, пожалуйста, как это исправить.
Lamer_q2 вне форума Ответить с цитированием
Старый 07.12.2013, 11:43   #5
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Код:
{Даны две строки. Пусть n1 - число слов в первой строке, а n2 - во второй (n1<n2).
Добавить в конец первой строки, последние n2-n1 слов второй строки.}

const

   limits = [#0..#32,'.',',',':',';','!','?','"'];
type

   TWords = array[1..40] of string;

var
   Str1,Str2: string;
   words : TWords;
   i, m:integer;
   n1,n2,k3,k4,k5:integer;

function GetWords(s : string; var w : TWords) : byte;
var
   i,back,n : byte;
begin
   i := 1;
   n := 0;
   while(i<=length(s)) do begin
      while(i<=length(s)) and (s[i] in limits) do
       inc(i);
      if i<=length(s) then begin
         back := i;
         while(i<=length(s)) and not(s[i] in limits) do
          inc(i);
         inc(n);
         w[n] := copy(s, back, i-back);
      end;
   end;
   GetWords := n;
end;

begin
 str1:='Мама мыла мылом раму.';
 str2:='Даны две строки. Пусть n1 - число слов в первой строке, а n2 - во второй (n1<n2). Добавить в конец первой строки последние n2-n1 слов второй строки.';
 n1:=getwords(str1,words);
 n2:=getwords(str2,words);
 for i:=n2-n1 to n2 do
   str1:=str1+words[i]+' ';
 writeln(str1);
 readln;

end.
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Даны две матрицы.Есть ли в них одинаковые столбцы? NIKALEX1995 Помощь студентам 3 25.12.2012 22:36
Даны две последовательности чисел.PASCAL. NIKALEX1995 Помощь студентам 1 20.12.2012 10:46
Даны две строки длиной до 80 символов. Необходимо: удалить заданный символ в каждой строке irek01 Visual C++ 0 23.05.2012 17:22
1. Даны две переменные целого типа: A и B. Если их значения не равны.... Alexspirit Помощь студентам 3 24.01.2012 22:30