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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2013, 00:48   #1
Septor
Новичок
Джуниор
 
Регистрация: 23.01.2013
Сообщений: 6
По умолчанию Выдача символов между первой и последней точкой

Здравствуйте
Паскаль сильно не знаю, пытался разобраться но не понимаю...
Решение загуглил, работает...но как?
Код:
program prog;
var
 s1,s2: string; ///сам загуглю данный тип
 k,j : byte; ///аналогично
begin
   readln(s1); ///я пишу строку эта строка s1 (пример qs.qs.)
  s2:=s1; ///s1 клонируется и мы можем оперировать s2 еще (qs.qs.)
  k:=pos('.',s2); ///первая точка ищется в s2 и ее позиция под номером k (3)
  if k<>0 then ///если она существует (наверное так следует понимать <>) тогда
  begin
   while pos('.',s2)<>0 do ///не знаю
   begin
     j:=pos('.',s2); ///позиция снова первой точки только теперь j (3)
     delete(s2,j,1); ///удаляем s2, j и 1 (какую единицу?) может быть в s2 удаляем j знак? 
     insert(',',s2,j); ///вставляем ,s2j (qs.qs..)
   end;
    if j<>k then writeln(copy(s1,k+1,j-k-1))
           else writeln ('net poslednei tochki') ///это если позиция первой точки совпала с позицией последней наверное
  end
  else writeln ('tochek net'); (это если j не нашлась видимо)
  readln
end.
если не трудно расскажите пожалуйста про
copy(s1,k+1,j-k-1)
delete(s2,j,1)
insert(',',s2,j)
русским языком,что делается тут?
английский знаю, копировалось удалилось, вставилось. Непонятно что в скобках
https://www.dropbox.com/s/znsfyn8ycu9wqdq/Symbol.pas
https://www.dropbox.com/s/utofg04gd6nh9di/Symbol.exe
http://programmersforum.ru/showthread.php?t=45217 отсюда решение скатал

Последний раз редактировалось Stilet; 24.01.2013 в 09:22.
Septor вне форума Ответить с цитированием
Старый 24.01.2013, 06:19   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
var
 s1,s2: string; ///строковый тип
 k,j : byte; ///числовой тип (положительные от 0 до 255)
 begin
 readln(s1); ///ввод s1
 s2:=s1; ///s1 клонируется и мы можем оперировать s2 еще (qs.qs.) - правильно
 k:=pos('.',s2); ///первая точка ищется в s2 и ее позиция под номером k (3)
 if k<>0 then ///если она существует (наверное так следует понимать <>) тогда
 begin
 while pos('.',s2)<>0 do ///Пока точки существуют в строке s2
 begin
 j:=pos('.',s2); ///позиция снова первой точки только теперь j (3)
 delete(s2,j,1); ///удаляем ИЗ s2, с j позиции  1 символ (то бишь саму точку)
 insert(',',s2,j); ///вставляем в s2 в позицию j запятую (вместо точки)
 end;
 if j<>k then writeln(copy(s1,k+1,j-k-1))   //если первая и последняя точки на разных позициях то копируем из s1 кусок в j-k-1 символов, начиная с k+1 символа 
 else writeln ('net poslednei tochki') ///это если позиция первой точки совпала с позицией последней наверное - правильно
 end
 else writeln ('tochek net'); (это если j не нашлась видимо - нет, это если k не нашлась - то бишь позиция точки в строке = 0)
 readln
 end.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 24.01.2013 в 06:30.
Sciv вне форума Ответить с цитированием
Старый 24.01.2013, 06:27   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Вообще можно по другому - гораздо проще:

Код:
var s: string;             //строка
    point1,point2: integer;      //точки - первая и последняя

begin
  ReadLn(s);                   //ввод строки
  point1:=pos('.',s);          //определяем позицию точки в строке
  if point1=0 then WriteLn('Точек в строке нет!')      //если точек нет вообще
  else begin
    point2:=length(s);                   //point2=индекс последнего символа в строке (length - функция длины строки)
    While s[point2]<>'.' do dec(point2);  //Цикл: пока символ в позиции point2<>'.' уменьшаем point2 на 1
    if point2=point1 then WriteLn('В строке всего одна точка!') //если позиции первой и последней точки совпадают
    else WriteLn(copy(s,point1+1,point2-point1-1));  //вывод собственно строки между точками
  end;
end.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 24.01.2013, 08:35   #4
Septor
Новичок
Джуниор
 
Регистрация: 23.01.2013
Сообщений: 6
По умолчанию

Спасибо большое. Сейчас домой приеду буду вникать подробнее
Septor вне форума Ответить с цитированием
Старый 24.01.2013, 09:25   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Sciv, +1
забавно, если бы тут написал свой пример, то он по алгоритму в точности совпал с предложенным Вами!


Цитата:
Сообщение от Septor
Спасибо большое. Сейчас домой приеду буду вникать подробнее
ага. Вникнуть, думаю, Вам будет легко - код и сам по себе достаточно информативен, да ещё и каждый "чих" в программе прокомментирован!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.01.2013, 18:50   #6
Septor
Новичок
Джуниор
 
Регистрация: 23.01.2013
Сообщений: 6
По умолчанию

ну видимо я тупее несколько) в общем я так и не понял как находится последняя точка в первом варианте. Зато понял как находится в варианте, предложенном Sciv. Его и использовал. Спасибо еще раз
Septor вне форума Ответить с цитированием
Старый 24.01.2013, 23:53   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Зато понял как находится в варианте, предложенном Sciv.
тут в теме оба варианта предложены именно Sciv

и тот, что в пост #3 - на мой взгляд и проще и нагляднее...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.01.2013, 05:29   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Сергей, первый вариант не мой, я там только комменты ставил, даже не вникал в алгоритм особо...
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 06.02.2014, 00:15   #9
gloriya
Новичок
Джуниор
 
Регистрация: 06.02.2014
Сообщений: 2
По умолчанию

помогите пожалуйста необходимо написать программу на паскале которая удаляет запятую между 2-мя точками.
gloriya вне форума Ответить с цитированием
Старый 06.02.2014, 07:59   #10
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Лучше было бы создать новую тему, а то вообще могли Вашего вопроса не увидеть

Берите приведенный выше код. Вместо строки:

Код:
WriteLn(copy(s,point1+1,point2-point1-1))
пишите:

Код:
begin
  while (s[point2]<>',') and (point2>point1) do dec(point2);
  if point1<>point2 then delete(s,point2,1);
end;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в заданной строке символов (отдельные слова, разделенные пробелом) найти слова с совпадающими первой и последней буквами (С++) T_h_i_s Помощь студентам 0 19.11.2012 18:37
переход от последней ячейки к первой vostok Microsoft Office Excel 4 04.11.2011 22:10
VisualBasic.Исключить из числа цифры, стоящие между первой и последней цифрой числа. ride013 Помощь студентам 0 03.05.2011 21:20
Чтение из типизированного файла с последней записи и до первой vmilyoshin Помощь студентам 7 28.04.2010 15:34
ПОЛУЧИТЬ ВСЕ СИМВОЛЫ, РАСПОЛОЖЕННЫЕ МЕЖДУ ПЕРВОЙ И ПОСЛЕДНЕЙ ТОЧКАМИ MMARKIN Паскаль, Turbo Pascal, PascalABC.NET 7 13.04.2009 09:48