С Новым годом! Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 48

Как сделать так, чтобы эта программа не только переводила со строчных в заглавные, но и проверяла строчная или нет?

05.03.2020, 15:51. Показов 1693. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На всякий случай условие оставлю: "Дан файл, содержащий текст, записанный строчными русскими буквами. Получить в другом файле тот же текст, записанный заглавными буквами".

Написал программу значит, переводящий из строчных в заглавные буквы:

Первая часть программы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
var f: text; n: string;
begin
assign(f,'s.txt');
reset(f);
while not eof(f) do
        begin
          read(f,n);
          end;
write(n);
close(f);
end.
И вторая часть:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var f, g: text; n: string;
begin
assign(f,'s.txt');
assign(g,'z.txt');
reset(f);
rewrite(g);
while not eof(f) do begin
readln(f,n);
n:=upcase(n);
writeln(g,n);
end;
close(f);
close(g);
end.
Как сделать, чтобы эта программа проверяла строчные или нет? Если строчные, то переводить, если нет оставить.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.03.2020, 15:51
Ответы с готовыми решениями:

Как сделать чтобы программа и руский текст в английский переводила
program sdr; Uses CRT; var x,g,s,w,z,f:string; i,P1,P2,r,t,c,k:byte; m:char; begin write('Введите текст: '); readln(x); ...

Как сделать, чтобы после выполнения условия, программа не проверяла следующие?
Мне нужно чтобы после вывода текста " нет значений x и z" программа больше ничего не выводила, но после этого она так же пишет " z...

Подскажите как, чтобы программа проверяла как оценку. И как сделать один раз в цикле?
AUch.FIO:=Sg1.Cells; AUch.gr.fak:=Sg1.Cells; AUch.gr.kurs:=strtoint(Sg1.Cells); AUch.gr.spec:=Sg1.Cells; Try ...

13
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
05.03.2020, 16:27
Цитата Сообщение от Shiro Paradox Посмотреть сообщение
Как сделать, чтобы эта программа проверяла строчные или нет? Если строчные, то переводить, если нет оставить.
функция upcase с русскими символами не работает.
Заведите 2 константных строки-алфавит малых и больших букв.
читать файл посимвольно
Pascal
1
2
3
4
5
6
7
8
9
10
const mb='абвгдеёж......';
         bb='АБВГДЕЁЖ....';
var c:char;
.................
while not eof(f)do
 begin
   read(f,c);
   if pos(c,mb)>0 then c:=bb[pos(c,mb)];
   write(g,c);
 end;
1
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 48
05.03.2020, 17:30  [ТС]
А можно английскими?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
05.03.2020, 17:34
У Вас в задании
Цитата Сообщение от Shiro Paradox Посмотреть сообщение
Дан файл, содержащий текст, записанный строчными русскими буквами.
0
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 48
05.03.2020, 19:22  [ТС]
А, точно. Не внимательно прочёл условие. Ты же просто заменил часть кода, да?

Добавлено через 1 час 26 минут
Написал, текст в s.txt ввёл, но в z.txt ничего не появляется, да и в компиляторе "Running название файла" и дальше не выводится на экран.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
const m='абвгдеёж......';
         b='АБВГДЕЁЖ....';
var f: text; n: char;
begin
assign(f,'s.txt');
reset(f);
while not eof(f) do
        begin
          read(f,n);
          end;
write(n);
close(f);
end.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const m='абвгдеёж......';
         b='АБВГДЕЁЖ....';
var f, g: text; var n:char;
begin
assign(f,'s.txt');
assign(g,'z.txt');
reset(f);
rewrite(g);
while not eof(f) do
 begin
   read(f,n);
   if pos(n,m)>0 then n:=b[pos(n,n)];
   write(g,n);
 end;
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
05.03.2020, 19:38
Во первых напиши алфавиты полностью, а потом в строке 12
then n:=b[pos(n,m)];
0
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 48
05.03.2020, 19:53  [ТС]
Алфавит, то полностью, написал.
Цитата Сообщение от Puporev Посмотреть сообщение
then n:=b[pos(n,m)];
И это тоже сделал. Но ничего не поменялось. У вас как было написано?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
05.03.2020, 20:04
А, это же Free Pascal, он не понимает русские буквы в файлах.
Нужно или переводить файл в кодировку DOS или применять в программе процедуры отсюда.
Конвертация строк
0
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 48
05.03.2020, 22:16  [ТС]
Теперь во втором файле ничего не появляется, как будто бесконечный цикл начался. Running и никакого результата.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
06.03.2020, 09:04
Лучший ответ Сообщение было отмечено Shiro Paradox как решение

Решение

Ох уж эти русские буквы...
Я бы написал так.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
const alf='абвгдеёжзийклмнопрстуфхцчшщъыьэюя';//алфавит
procedure Convert(var s:string);//перевод  из файла в программу{ANSI -> ASCII}
var i:integer;
begin
for i:=1 to length(s) do
if ord(s[i]) in [192..239] then s[i]:=chr(ord(s[i])-64)
else if ord(s[i]) in [240..255] then s[i]:=chr(ord(s[i])-16)
else if ord(s[i])=168 then s[i]:=chr(ord(240))
else if ord(s[i])=184 then s[i]:=chr(ord(241));
end;
 
function UpCaseRus(c:char):char;{русские в верхний регистр}
begin
if c in ['а'..'п'] then c:=chr(ord(c)-32)
else if c in ['р'..'я'] then c:=chr(ord(c)-80)
else if c='ё' then c:='Ё';
UpCaseRus:=c;
end;
 
procedure Convert1(var a:string);//перевод из программы в файл{ASCII->ANSI}
var i:integer;
begin
for i:=1 to length(a) do
if ord(a[i]) in [128..175] then a[i]:=chr(ord(a[i])+64)
else if ord(a[i]) in [224..239] then a[i]:=chr(ord(a[i])+16)
else if ord(a[i])=240 then a[i]:=chr(ord(168))
else if ord(a[i])=241 then a[i]:=chr(ord(184));
end;
 
 
var f,g:text;
    s:string;
    i:integer;
begin
clrscr;
assign(f,'F.txt');
reset(f);
assign(g,'G.txt');
rewrite(g);
while not eof(f)do
 begin
  readln(f,s);//читаем построчно
  convert(s);//конвертируем
  for i:=1 to length(s) do//если малая русская буква
  if pos(s[i],alf)>0 then s[i]:=UpCaseRus(s[i]);//переводим в верхний регистр
  convert1(s);//обратно конвертируем
  writeln(g,s);//пишем в новый файл
 end;
close(f);
close(g);
readln
end.
1
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
06.03.2020, 09:29
Записал в файле s.txt (файл должен находится в одной папке с исполняемым файлом) "мама мыла раму" кириллическими символами и получил такую же строку в консоле.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
program Zadanie181project1a;
{$codepage utf8}
var
  f: text;
  n: widechar;
begin
  assign(f,'s.txt');
  reset(f);
  while not eof(f) do
    begin
      read(f,n);
      write(n);
    end;
  close(f);
  readln;
end.
Добавлено через 24 минуты
У меня код вроде работает.
Записал в файле s.txt (файл должен находится в одной папке с исполняемым файлом) "мама мыла раму" кириллическими символами и получил такую же строку в консоль, а затем записал эту строку заглавными буквами в файл z.txt и извлек эту строку из файла в консоль.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
program Zadanie181project1b;
{$codepage utf8}
const
  filename1 = 's.txt';
  filename2 = 'z.txt';
const
  m = 'абвгдеёжийклмнопрстуфхцчшщъыьэюя';
  b = 'АБВГДЕЁЖИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
var
  f, g: text;
  n: widechar;
begin
  assign(f,filename1);
  reset(f);
  assign(g,filename2);
  rewrite(g);
  writeln('Информация из файла ', filename1,': ');
  while not eof(f) do
    begin
      read(f,n);
      write(n);
      if pos(n,m) > 0 then
        n:= b[pos(n,m)];
      write(g,n);
    end;
  writeln;
  writeln('Информация из файла ', filename2,': ');
  reset(g);
  while not eof(g) do
    begin
      read(g,n);
      write(n);
    end;
  close(f);
  close(g);
  readln;
end.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
06.03.2020, 09:31
Да, я написал вроде как для Турбо Паскаля, Free Pascal толком не знаю.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33369 / 21495 / 8234
Регистрация: 22.10.2011
Сообщений: 36,889
Записей в блоге: 12
06.03.2020, 12:34
ValentinNemo, все гораздо проще:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{$codepage utf8}
uses character;
var
  f1, f2 : text;
  s : widechar;
begin
  assign(f1, 's.txt'); reset(f1);
  assign(f2, 't.txt'); rewrite(f2);
  while not eof(f1) do
  begin
    read(f1, s);
    if tcharacter.islower(s) then s := tcharacter.toupper(s);
    write(f2, s);
    write(s);
  end;
  close(f1); close(f2);
  readln;
end.
1
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
06.03.2020, 14:03
Free Pascal богатый на классы язык. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2020, 14:03
Помогаю со студенческими работами здесь

Сделать так, чтобы эта программа считала еще и числа с плавающей точкой
как сделать так ,чтобы эта программа считала еще и числа с плавающей точкой #include<stdio.h> int main() { int a, b, c, sum;...

Программа замены строчных букв на заглавные или наоборот
Строка запуска программы имеет вид: prog.exe s1 где: s1 строка символов, состоящая из прописных и строчных латинских символов -...

Как сделать, чтобы пользователь вводил только заглавные буквы?
Нужно, чтобы пользователь мог вводить только маленькие английские буквы(но получались сразу большие) цифры и точку. Добавлено через...

Как в sql реализован логич.тип?Как можно в sql сделать так,чтобы были только значения "0"и"1" или "да"и"Нет"?
Хочу использовать в таблице переменные логического типа, но не нашла ничего про логический тип в sql, мб просто плохо гуглила......

Как сделать так, чтобы одним нажатием кнопки, заглавные буквы стали маленькими?
Как сделать так, чтобы одним нажатием кнопки, заглавные буквы стали маленькими? Помогите пожалуйста, если можно, то с примером. Спасибо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru