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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2012, 00:52   #1
Владан
Пользователь
 
Аватар для Владан
 
Регистрация: 24.09.2012
Сообщений: 51
По умолчанию Лаба7: Удалить все буквы "а" из строки (Паскаль)

Задали произвольную строку, выполнить с ней следующие действия. Внимание! Не использовать дополнительную строку и встроенные функции. Удалить все буквы "а" из строки.
в чем моя ошибка ??? подскажите
Код:
uses
  SysUtils,math,windows;
var
  a:string;
  c:
  i,b:integer;

begin
  setconsoleCP(1251);
  setconsoleoutputCP(1251);
  Writeln('Введіть рядок');
  readln(a);
  b:=length(a);
  i:=1;
  While i<=b do
  begin
  if c='a' then
  delete (a,i,1);
  i:=i-1;
  b:=length(a);
end;
Writeln(b);
i:=i-1;
end.



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

Последний раз редактировалось Serge_Bliznykov; 30.10.2012 в 08:33.
Владан вне форума Ответить с цитированием
Старый 30.10.2012, 07:26   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
i:=i-1
Надо i := i + 1

И насколько я помню цикл while в отличии от for каждый раз вычисляет границу цикла, так что выкинем b и будет использовать только Length(s).
Или идти циклом for с конца, тогда вообще не будет заморочек с длиной строки (пример много на форуме, насколько помню for i := Length(s) downto 1 do делал Серж)
Poma][a вне форума Ответить с цитированием
Старый 30.10.2012, 08:40   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

согласен с Poma][a, во всех случаях, когда нужен цикл и в цикле удаляются элементы, лучше делать обратный цикл от последнего элемента к первому:
Код:
for i:=Length(a) downto 1 do
  if a[i]='a' then Delete(a,i,1);
Это ВЕСЬ цикл обработки, фактически - вся программа за исключение описания переменных и ввода/вывода..


Но есть и ещё одно замечание по программе...
Цитата:
Сообщение от Владан
Код:
  delete (a,i,1);
Цитата:
Сообщение от Владан
Не использовать дополнительную строку и встроенные функции.
Возможно, я Вас расстрою, но Delete() является встроенной функцией...
Впрочем, попробуйте сдать задание с этой функцией, потому как в противном случае прийдётся изменять (уменьшать) длину строки - а это можно сделать или хакерскими методами, либо, опять же, встроенными функциями...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.10.2012, 08:56   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю такое сжатие строки:
Код:
k:=1;
for i:=1 to Length(a) do  if c[i]<>'a' then begin c[k]:=c[i];inc(k);end;
for i:=k to Length(a) do c[i]:=' ';
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.10.2012, 09:04   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Отлично, Белик Виталий, садитесь, зачёт!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.10.2012, 09:12   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
садитесь
Товаришь судья, я же ничего не украл Меня подставили!!!
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.10.2012, 15:04   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Красиво
Ток несколько вопросов :
А зачем Length(a), если наша строка c ? (Наверное, просто описка)
И зачем последний цикл восстанавливает длину строки?
Poma][a вне форума Ответить с цитированием
Старый 30.10.2012, 17:20   #8
NinaSSS
Пользователь
 
Регистрация: 30.10.2012
Сообщений: 34
По умолчанию

вот тебе код
#var l:string; i,ll:integer;
begin
readln(l);
ll:=length(l);
for i:=1 to ll do begin
if l[i]='а' then delete(l,i,1);end;
writeln('novaa stroka ',l);end.#
NinaSSS вне форума Ответить с цитированием
Старый 30.10.2012, 19:45   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Люблю цитировать Сержа :
Цитата:
Возможно, я Вас расстрою, но Delete() является встроенной функцией...
Poma][a вне форума Ответить с цитированием
Старый 30.10.2012, 20:22   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

NinaSSS, во-первых, для Delete правильный код я уже опубликовал выше пост #3 (цикл должен быть обратный от конца строки к началу, т.к. Вы в цикле удаляете элементы, следущий элемент будет сдвигаться!) Ваш код вообще не рабочий!

во-вторых, Ромаха прав, Delete встроенная функция

в-третитьих, Stilet привел пример кода БЕЗ использования встроенных функций.

в-четвёртных, код нужно оформлять тегами!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки(pascal) - удалить все гласные русские буквы wormiks40 Помощь студентам 3 20.04.2012 09:39
Как удалить все буквы их ячеек и оставить № телефонов. Ppaa Microsoft Office Excel 14 05.07.2011 13:49
из заданной строки текста вывести в алфавитном порядке все содержащиеся гласные буквы (Паскаль) zzz6 Помощь студентам 4 30.06.2011 13:46
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова nick23 Помощь студентам 7 01.11.2009 14:47