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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2013, 00:12   #1
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
Печаль Pascal. Upcase

В задании нужно, что-бы слова, которые состоят из маленьких букв перевести в верхний регистр ( сделать большими ), а если слово состоит из больших и маленьких (пример: ТрОн) оставить такими же, и вывести это все. Подскажите в чем ошибка, или что нужно добавить. У меня просто переводит все слова в верхний регистр

Код:
var
   f,p : text;
   sim : char;
   st: string;
   i:integer;
begin
     assign(f,'test.pas');
     assign(p,'itog.pas');
     reset(f);
     writeln('   Исходный файл : ');
     while not eof(f) do
          begin
               readln(f,st);
               write(st);
               writeln;
          end;
          rewrite(p);
          reset(f);
     while not eof(f) do
          begin
               read(f,sim);
               For i:=1 to length(st) do
                  sim:=upcase(sim);
                  write(p,sim);
          end;

     writeln('   Полученный файл : ');
     reset(p);
     while not eof(p) do
          begin
               readln(p,st);
               writeln(st);
          end;
     close(f);
     close(p);
end.
Liinad вне форума Ответить с цитированием
Старый 04.04.2013, 00:20   #2
viks1
человек
Форумчанин
 
Аватар для viks1
 
Регистрация: 11.05.2009
Сообщений: 517
По умолчанию

Тебе надо просто если есть большая буква, перенести в регистр маленький, а первую поднять ? я правильно понял?
viks1 вне форума Ответить с цитированием
Старый 04.04.2013, 00:50   #3
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
По умолчанию

Нет если слово только с маленьких букв то перевести его в верхний регистр (пример: самолет->САМОЛЕТ), а если слово состоит с маленьких и больших оставить прежним ( пример: СамОлет , это слово не трогаем)
Liinad вне форума Ответить с цитированием
Старый 04.04.2013, 00:53   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

тут ещё важно, какой Паскаль...

например, в TurboPascal стандартный UpCase тупо игнорировал все символы, кроме латиницы.

поэтому и рождались такие "шедевры":
Код:
function UpperRus(s : string) : string;
const 
  LoRus = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
  UpRus : string = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
var i : integer;
begin
  for i:=1 to Length(s) do
    if Pos(s[i],LoRus)>0 then s[i] := UpRus[Pos(s[i],LoRus)]
    else s[i] := UpCase(s[i]);
  UpperRus := s
end;

begin
  Write(UpperRus('test is Only Best В чаще юга жил был цитрус!'));
  readln
end.
Разумеется, это всего лишь один из простых, универсальных вариантов.
А вообще, функций, которые изменяют регистр букв и для кириллицы было много, начиная с ассемблерного варианта и заканчивая манипуляциями с битами




UPDATE

вот, "до кучи", ещё один вариант:
Цитата:
(* (c) puporev
http://www.programmersforum.ru/showp...4&postcount=20
преобразовать текст в верхний регистр - UpperCase
*)

Код:
uses crt;
const mb1=['а'..'п'];
      mb2=['р'..'я'];
var s:string;
    i:integer;
begin
  clrscr;
  write('s: ');readln(s);
  for i:=1 to length(s) do
    if s[i] in mb1 then s[i]:=chr(ord(s[i])-32)
    else if s[i] in mb2 then s[i]:=chr(ord(s[i])-80)
    else if s[i]='ё'then s[i]:='Ё';
  write(s);
  readln
end.
UPDATE 2

Цитата:
Нет если слово только с маленьких букв то перевести его в верхний регистр (пример: самолет->САМОЛЕТ), а если слово состоит с маленьких и больших оставить прежним ( пример: СамОлет , это слово не трогаем)
кстати, проверять, из маленьких букв или нет состоит слово очень удобно, с помощью кода:
Код:
const 
  LoRus = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
var i : integer;
  isSmallRusOnly : boolean;
begin
  isSmallRusOnly := true;
  for i:=1 to Length(s) do
    if Pos(s[i],LoRus)=0 then 
       begin isSmallRusOnly := false; 
              break 
       end;
  if isSmallRusOnly then s := UpperRus( s );

Последний раз редактировалось Serge_Bliznykov; 04.04.2013 в 01:02.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.04.2013, 01:08   #5
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
По умолчанию

Serge_Bliznykov, вы как всегда отзывчивы). У меня Паскаль ABC, я попробовал функцию которую вы мне написали первую, ну результат такой же как и у меня, полностью все слова почему-то переводит в верхний регистр. Так что с этим сейчас буду разбираться. Отдельное спасибо за функцию для проверки слова )
Liinad вне форума Ответить с цитированием
Старый 04.04.2013, 01:20   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
полностью все слова почему-то переводит в верхний регистр.
посмотрите, я дописал update 3 в своём сообщении выше...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.04.2013, 01:42   #7
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
По умолчанию

Все, увидел )
Liinad вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача turbo pascal на тему: файлы с произвольным доступом в Pascal ExCiTeC Паскаль, Turbo Pascal, PascalABC.NET 0 28.01.2013 20:36
Программы в Pascal, среда pascal ABC. Лабораторные работы Одинокая Волчица Фриланс 8 10.02.2012 20:09
Неудобство ABC Pascal и глюк Borland Pascal proser93 Помощь студентам 0 19.11.2011 19:01
Turbo Pascal и Free Pascal , в чем разница? antoxann Паскаль, Turbo Pascal, PascalABC.NET 31 09.11.2011 07:52
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28