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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2012, 10:19   #1
Савва
 
Регистрация: 28.01.2012
Сообщений: 6
По умолчанию Работа с массивом/строкой символов, преобразование символа с число. (Pascal, Delphi)

Здравствуйте.
На первом этапе реализации задачи возникла следующая проблема. Суть такова: нужно сделать так, чтобы вводилась строка символов (кириллица, не латиница) и изначально каждому символу была присвоена какая-то цифра в программе. А затем, каждый символ в строке (массиве) преобразовывался в это присвоенное число и находилась сумма всех чисел.
Например:
вводится слово Дом
Д присвоено 14
о присвоено 3
м присвоено 10
(то есть пользователь не вводит значения, они уже запрограммированы)
14+3+10=27
приложение консольное.

как наиболее просто реализовать это?
Копировать свои наработки не буду, ибо там бред. =)
Савва вне форума Ответить с цитированием
Старый 28.01.2012, 10:45   #2
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

я бы на твоем месте завел массив типа такого
a: array[char(0)..char(255)] of integer;
потом присваиваешь нужные значения
a['Д']:= 14;
a['о']:= 3;

а потом просто подставляешь из строки нужные символы типа
a[s[1]]+a[s[2]]+a[s[3]]
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com
D@rkD@iver вне форума Ответить с цитированием
Старый 28.01.2012, 11:08   #3
Савва
 
Регистрация: 28.01.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от D@rkD@iver Посмотреть сообщение
я бы на твоем месте завел массив типа такого
a: array[char(0)..char(255)] of integer;
потом присваиваешь нужные значения
a['Д']:= 14;
a['о']:= 3;

а потом просто подставляешь из строки нужные символы типа
a[s[1]]+a[s[2]]+a[s[3]]
что-то массив этот не работает. или я что-то не так делаю.
Савва вне форума Ответить с цитированием
Старый 28.01.2012, 11:13   #4
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

А можно и так сделать - буквы кириллицы забить в массив из 33 элементов в нужной вам последовательности. И потом сравниваешь символы строки с элементами массива. Например -
Код:
for i:=1 to length(Str) do
   for j:=1 to 33 do
      if Str[i]=Mas[j] then
         write(j);
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Старый 28.01.2012, 11:14   #5
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Код:
const c='БВГДлмноп'; //изначальный набор символов
      d:array [1..9] of integer=(1,5,12,14,11,10,6,3,9); //числа соответствующие каждому символу
var s:string;
    i,k:integer;
begin
  readln(s);
  k:=0;
  for i:=1 to length(s) do
    k:=k+d[pos(s[i],c)];
  writeln(k);
end.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 28.01.2012, 15:58   #6
Савва
 
Регистрация: 28.01.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Plague Посмотреть сообщение
Код:
const c='БВГДлмноп'; //изначальный набор символов
      d:array [1..9] of integer=(1,5,12,14,11,10,6,3,9); //числа соответствующие каждому символу
var s:string;
    i,k:integer;
begin
  readln(s);
  k:=0;
  for i:=1 to length(s) do
    k:=k+d[pos(s[i],c)];
  writeln(k);
end.
спасибо, работает!

Последний раз редактировалось Савва; 28.01.2012 в 16:35.
Савва вне форума Ответить с цитированием
Старый 28.01.2012, 16:36   #7
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Так по порядку!
По какому принципу символу ставится в соответствие число?
Просто так или по есть какие-то "Предпочтения"?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 28.01.2012, 16:43   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
сделал так, но в любом случае в ответ выводит 0
НЕ ВЕРЮ!
небось в строчку ввели буковки, которых НЕТ в исходной строке C ?! (учтите, что регистр в данном случае ВАЖЕН!)

да. если Вы данную программу вставляли в Delphi, тогда нужно учитывать ещё и кодировку символов!
например, так:
Код:
program Project2;
{$APPTYPE CONSOLE}
uses SysUtils, Windows;

const c='БВГДлмноп'; {//изначальный набор символов}
      d:array [1..9] of integer=(1,5,12,14,11,10,6,3,9); {//числа соответствующие каждому символу}

function StrOemToAnsi(const S: AnsiString): AnsiString;
begin
  SetLength(Result, Length(S));
  OemToCharBuff(@S[1], @Result[1], Length(S));
end;

var s:string;
    i,k:integer;
begin
  readln(s);
  s := StrOemToAnsi(s);
  k:=0;
  for i:=1 to length(s) do
    k:=k+d[pos(s[i],c)];
  writeln(k);
  Readln;
end.

p.s. к слову сказать, идея решения от D@rkD@iver (см. пост #2) тоже вполне себе достойная. Мне такой подход даже больше нравится, чем с поиском - он эффективней в плане быстродействия.

Последний раз редактировалось Serge_Bliznykov; 28.01.2012 в 17:08.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.01.2012, 12:27   #9
Савва
 
Регистрация: 28.01.2012
Сообщений: 6
По умолчанию

Спасибо всем, разобрался.
теперь осталось решить ещё проблему.. вот число, которое находится, надо его как-то разбить.
пример: 156=100+50+6
не 1, 5 и 6, а так. то есть чтобы программа могла ЛЮБОЕ число так разбить. и с тысячами... 1893= 1000+800+90+3
суть программы в том, что... для каждого полученного числа будет выводиться интерпретация. а если числа, находящегося в списке интерпретации (то есть там просто будет выводиться текст) нет, то прога разбивает число вышеописанным образом и находит имеющиеся интерпретации среди более маленьких чисел.
Савва вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование в число (Delphi) I.nessa Помощь студентам 14 14.12.2010 15:18
Работа с массивом символов (строкой) deathz0r Помощь студентам 2 04.06.2010 22:22
Язык С. Редактирование вводимых символов. работа с строкой radion_80 Помощь студентам 1 18.12.2009 01:30
Язык С. Редактирование вводимых символов. работа с строкой (не пойму) radion_80 Помощь студентам 3 04.12.2009 10:38
Преобразование строки символов в число. pa6kevi4 Общие вопросы C/C++ 2 15.09.2009 20:46