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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2014, 23:19   #1
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию Задачу на string решить через array of char

Уважаемые форумчане и знатоки delphi,прошу помощи.Такие дела вот...написал преподавателю решение этой задачи
использую функции и процедуры,спец. созданные для строк.А он мне сказал, не приму, делай всю задачу через array of char. И чтобы вводилась не строка ,а именно посимвольное заполнение массива. Помогите пожалуйста :help:

P.s.Честное слово, бьюсь уже 3 дня над этой задачей,видимо такой тупой,что не могу переделать,а если кто не верит,могу показать решенную задачу через строки и наработки к этой ситуации(но они бредовые..)

Дана стока состоящая из латинских букв,в которой слова разделены пробелами(одним или несколькими).Напечатать те строки,которые отличны от последнего слова и удовлетворяют след. свойству:
- слово совпадает с начальным отрезком латинского алфавита ('a','ab','abc' и т.д.)
Neostat вне форума Ответить с цитированием
Старый 28.10.2014, 00:04   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

так вы показывайте, вам помогут. Здесь приветствуется наличие собственных наработок.
Вадим Мошев вне форума Ответить с цитированием
Старый 28.10.2014, 00:09   #3
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

секундочку

вот так я решил со строками
Код:
Const st=('abcdefghijklmnopqrstuvwxyz');
Var s,s1,sk:string;
    i,j:byte;
    trigger:boolean;
    
    
    
Begin
      write('Введите строку: ');
      readln(s);


      if s[Length(s)]='.' then
        Delete(s,Length(s),1);


        i:=Length(s);
        sk:='';
    While s[i]<>' ' do
       dec(i);

       {скопируем последнее слово в переменную sk, затем удалим его из основной строки}
       sk:=Copy(s,i+1,Length(s));
       Delete(s,i,Length(s));
       s:=s+' ';


    While Pos(' ',s)<>0 do
      Begin
        {скопируем слово до пробела в переменную s1 и удалим его из основной строки}
        s1:=Copy(s,1,Pos(' ',s)-1);
        Delete(s,1,Pos(' ',s));
        {проверим отличается ли слово в переменой s1 от слова в переменной sk}
      if s1<>sk then
          Begin
              i:=0;
              j:=0;
              trigger:=true;
          {сравним слова в переменных поэлементно}
          While (i<Length(s1)) and (trigger) do
           Begin
              inc(i);
                 if not(s1[i] in ['a'..'z']) then
                  inc(j);
                 if not(s1[i]=st[i-j]) and ((s1[i] in ['a'..'z']) or (s1[i] in ['а'..'я'])) then
                  trigger:=false;
            end;
          if trigger then
             writeln(s1);
         end;
     end;

end.


теперь пытаюсь реализовать примерно такой же алгоритм с массивами оф чар):
Код:
const n = 80;
var a,sk,s1: array[1..n] of char;

     i,len,j,z,k,pr: integer;
    trigger: boolean;
begin

   writeln('Введите предложение, символ конца - точка');
   i := 0;
repeat
   inc(i);
   read(a[i])
until (a[i] = '.')or(i = n);
 readln;

if a[i] = '.' then
   len := i-1
else
    len := i;

  {ищем первый пробел с конца}
   While a[i]<>' ' do
      dec(i);


      z:=1;
      i:=i+1;
     {запишем элементы с конца до первого пробела  в массив sk}
    while i<=len do
       begin
          sk[z]:=a[i];
          inc(i);
          inc(z);
       end;

       {вспомогательный вывод}
     z:=z-1;
     for j:=1 to z do
       write(sk[j]);



  {ищем сколько символов до пробела}
  k:=0;
  for i:=1 to len do
     if a[i] <>' ' then
          begin
                inc(k)
              end
          else
            break;

  i:=1;
  {проверяем отлично ли слово от последнего или нет.Если да то true иначе false}
  while i<=k do
    begin
        if a[i] = sk[i] then
            trigger:=false
          else
        begin
           trigger:=true;
           break
        end;
         inc(i);

   end;

  {всп. вывод}
  writeln('k ',k);
     writeln;
 if trigger then
   writeln('true')
   else
   writeln('false');




end.

Но это всеголишь наработки, я могу проверить отличается ли первое слово от последнего или нет, но не понимаю как сделать так,чтобы проверялись все слова в массиве( за слова считать символы от пробела до пробела или пустого символа)

Последний раз редактировалось Stilet; 28.10.2014 в 07:31.
Neostat вне форума Ответить с цитированием
Старый 28.10.2014, 09:12   #4
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Если вариант со строками работает, то вам надо просто реализовать функции Delete, Copy, Length для массивов символов =)
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 28.10.2014, 11:36   #5
Neostat
Пользователь
 
Регистрация: 19.10.2014
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Fenex Посмотреть сообщение
Если вариант со строками работает, то вам надо просто реализовать функции Delete, Copy, Length для массивов символов =)
да, но как..
Neostat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
алгоритм BWT. List<string>.qSort / Array(char).BubbleSort Lime C# (си шарп) 11 26.11.2012 17:29
String в array of Char и обратно. _PROGRAMM_ Общие вопросы Delphi 4 22.11.2011 22:10
builder string to char array 6AZblJlb C++ Builder 4 05.11.2010 20:10
array of char -> string Valkiria Общие вопросы Delphi 5 04.10.2007 10:40
Преобразовать из string в array of char vitalik007 Общие вопросы Delphi 6 07.09.2007 01:15