Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
DontRobot
0 / 0 / 0
Регистрация: 18.09.2016
Сообщений: 9
1

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

20.10.2016, 21:16. Просмотров 282. Ответов 4
Метки нет (Все метки)

Известно что в электронных таблицах excel столбцы обозначаются латинскими заглавными буквами и их комбинациями A, B, ..Z, AA, AB, ..AZ, BA, BB, и т. д. Каждому столбцу соответствует номер 1, 2, ..26, 27, 28, ..52, 53, 54, и т. д. Необходимо пользуясь алгоритмом данного соответствия, составить программу, которая переведет в число строку заглавных латинских букв, длиной не более 6 символов.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2016, 21:16
Ответы с готовыми решениями:

Вычислить количество заглавных латинских букв, входящих в заданную строку символов
Мужики помогите плз решить парачку задач......вся надежда на вас :'( 1) Даны натуральное число ...

Дана строка длиной не более 40 латинских символов
Дана строка длиной не более 40 латинских символов. Последний символ – «.». Слова в тексте разделены...

Написать программу, которая определит количество строк с длиной более 70 символов
Определить количество строк с длиной более 70 символов из документа

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

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

4
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27549 / 18459 / 7296
Регистрация: 22.10.2011
Сообщений: 32,443
Записей в блоге: 6
20.10.2016, 21:36 2
Обычный перевод из системы счисления с основанием 26 в десятичную:
Pascal
1
2
3
4
5
6
7
8
var s := '' + 'BB'; // Эту строку надо запрашивать у пользователя
begin
  var n := 0;
  for var i := s.Length downto 1 do
    n := 26 * n + Ord(s[i]) - Ord('A') + 1;
    
  writeln(n);
end.
P.S. Или так, в одну строку:
Pascal
1
2
3
4
var s := '' + 'BB';
begin
  writeln(s.Reverse().Select(ch -> Ord(ch) - Ord('A') + 1).Aggregate(0, (a, b) -> 26*a + b));
end.
1
Sergio Leone
2471 / 1116 / 580
Регистрация: 07.06.2014
Сообщений: 3,259
20.10.2016, 22:46 3
Цитата Сообщение от volvo Посмотреть сообщение
var s := '' + 'BB'; // Эту строку надо запрашивать у пользователя
begin
* var n := 0;
* for var i := s.Length downto 1 do
* * n := 26 * n + Ord(s[i]) - Ord('A') + 1;
writeln(n);
end.
Вы меня извините, но ваш код не всегда правильные ответы выдаёт.

попробуйте, например,
проверить для строки:
CAA (корректный ответ 2055)
и
следующей за ней
CAB (корректный ответ 2056)

или AAA у Вас правильный ответ (703), а следующее за ней AAB - уже не корректный...

разумеется, это просто несколько значений взятых навскидку.
на самом деле таких неверных ответов - туча...

и я не могу предположить, почему код неверно работает...

Добавлено через 6 минут
по моему, надо строку в прямом направлении перебирать:

Pascal
1
2
  for var i := 1 to s.Length  do 
    n := 26 * n + Ord(s[i]) - Ord('A') + 1;
Добавлено через 2 минуты
ну и соответственно:
Pascal
1
  writeln(s.Select(ch -> Ord(ch) - Ord('A') + 1).Aggregate(0, (a, b) -> 26*a + b));
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27549 / 18459 / 7296
Регистрация: 22.10.2011
Сообщений: 32,443
Записей в блоге: 6
20.10.2016, 22:50 4
Да. А вот так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
var s := '' + 'CAB';
begin
  var n := 0;
  var x := 1;
  for var i := s.Length downto 1 do
  begin
    n := n + x * (Ord(s[i]) - Ord('A') + 1); x *= 26;
  end;
    
  writeln(n);
end.
?
Цитата Сообщение от Sergio Leone Посмотреть сообщение
или AAA у Вас правильный ответ (702)
ААА должно равняться 262*1+261*1+260*1 = 676+26+14=703, а не 702
0
Sergio Leone
2471 / 1116 / 580
Регистрация: 07.06.2014
Сообщений: 3,259
20.10.2016, 23:03 5
Цитата Сообщение от volvo Посмотреть сообщение
ААА должно равняться ..... = 676+26+14=703
это я опечатался. и я давно это уже исправил

Добавлено через 3 минуты
Цитата Сообщение от volvo Посмотреть сообщение
Да. А вот так:
так правильно.
но зачем усложнять?
вот так
Pascal
1
2
  for var i := 1 to s.Length  do 
    n := 26 * n + Ord(s[i]) - Ord('A') + 1;
получается такой же ответ!
0
20.10.2016, 23:03
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2016, 23:03

Написать программу, которая вводит с клавиатуры строку не более 100 символов, еще одну строку не более 50 символов и выводит на экран позиции вхождени
Задание: Написать программу, которая вводит с клавиатуры строку не более 100 символов, еще одну...

Найти слова в исходной строке длиной не более 3-х символов и составить из них новую строку
найти слова в исходной строке длиной не более 3-х символов и составить из них новую строку, ввод...

Найти слова в исходной строке длиной не более 3-х символов и составить из них новую строку
найти слова в исходной строке длиной не более 3-х символов и составить из них новую строку, ввод...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru