Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
ZoyaN
0 / 0 / 0
Регистрация: 10.12.2010
Сообщений: 2
#1

Перевод подряд стоящих цифр из строки в целые числа - Pascal

10.12.2010, 09:35. Просмотров 1075. Ответов 5
Метки нет (Все метки)

Дана строка текста из букв и цифр. Не пользуясь стандартной процедурой для перевода цифр в число, организовать свою процедуру перевода подряд стоящих цифр в целые числа и найти их среднее арифметическое. Напечатать полученные цифры и результат
http://www.cyberforum.ru/pascal/thread724802.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2010, 09:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Перевод подряд стоящих цифр из строки в целые числа (Pascal):

Составить программу для вычисления суммы цифр, стоящих на нечетных позициях числа
Помогите пожалуйста сделать задачу

Найти все целые числа из интервала от N до M, которые делятся на сумму всех своих цифр
Найти все целые числа из интервала от N до M, которые делятся на сумму всех...

Даны целые положительные числа A и B (A < B). Вывести все целые числа от A до B включительно
Даны целые положительные числа A и B (A &lt; B). Вывести все целые числа от A до B...

Даны целое число и последовательность цифр, в которой выписаны подряд все трехзначные числа
Даны целое число k (1&lt;=k&lt;=150) и последовательность цифр 101102103…149150, в...

Перевод строки символов из цифр в целочисленный массив
В файле имеется строка состоящая из цифр (к примеру состоит из 13 символов)...

5
Puporev
Модератор
54131 / 41764 / 28875
Регистрация: 18.05.2008
Сообщений: 98,291
10.12.2010, 11:10 #2
Если отрицательные не нужны, выкинь лишнее, заодно потренируешься...

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
uses crt;
const cf=['0'..'9'];
procedure Chislo(s:string;var c:integer);
var i:byte;
    s1:string;
begin
s1:=s;{копия числа}
if s1[1]='-' then delete(s1,1,1);{если первый минус, удалим его из копии}
c:=0;{число}
for i:=1 to length(s1)do
c:=c*10+(ord(s1[i])-48);{умножаем на 10 и приписываем следующую цифру}
if s[1]='-'then c:=-c;{если был минус, меняем знак}
write(c,' ');{}
end;
var s,s1,s2:string;
    t:integer;
    sr:real;
    n,i,j,k:byte;
begin
clrscr;
writeln('Введите текст, содержащий буквы и числа:');
readln(s);
writeln('Числа, входящие в строку:');
sr:=0;
n:=0;
i:=1;
while i<=length(s) do
if (s[i] in cf)and ((i=1)or not(s[i-1]in cf)) then{если цифра, а перед ней не цифра, или она первая}
 begin
  k:=i;s1:='';
  n:=n+1;
  while (s[k] in cf)and(k<=length(s))do {пока цифры и не конец строки}
   begin
    s1:=s1+s[k];
    k:=k+1;{идем вперед}
   end;
  if (i>1)and(s[i-1]='-' then{если впереди был минус}
   begin
    insert('-',s1,1);{вставляем его вперед}
    i:=i+length(s1)-1;{перешагиваем на 1 меньше}
   end
  else i:=i+length(s1);{перепрыгиваем через всю длину слова}
  Chislo(s1,t);
  sr:=sr+t;{считаем сумму}
 end
else i:=i+1;{иначе идем вперед}
writeln;
if n=0 then write('Цифр в строке нет')
else write('Среднее арифметическое=',sr/n:0:2);
readln
end.
1
Напильнег
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
10.12.2010, 13:04 #3
Цитата Сообщение от Puporev Посмотреть сообщение
Если отрицательные не нужны, выкинь лишнее,
Тока так оно возможно и заработает, т.к. обработка знаков в этом опусе реализована криво.

Контрпример: 123qwertyu123asdfghj123zxcvbnm123khjbmtn123gt

Раз за разом одно и тоже.

А я ведь предупреждал - нельзя так строки обрабатывать, с возвратом к предыдущему символу, всех ньюансов при такой методе не учтешь, но некоторым что в лоб, что по лбу...
2
Puporev
Модератор
54131 / 41764 / 28875
Регистрация: 18.05.2008
Сообщений: 98,291
10.12.2010, 13:25 #4
Поправил.
0
Напильнег
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
10.12.2010, 15:05 #5
И че, так и будешь всякий раз после тыкания носом добавлять бесконечные проверки условий? Разбор строки надо делать так, чтобы обращений типа s[i-1] вобще не было - так, как будто идет посимвольный ввод с консоли, контролируя состояние путем установки флагов.

Вот пример кода, решающего ту же задачу без выкрутасов:
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
53
54
55
56
57
58
59
60
61
62
63
uses
  crt;
 
var
  s: string;
  i: integer;
  sum: real;
  n: integer;
  sign: integer;
  num: real;
  d: integer;
 
begin
  clrscr;
 
  writeln('Введите текст, содержащий буквы и числа:');
  readln(s);
 
  writeln;
 
  writeln('Числа, входящие в строку:');
  sum:=0;
  n:=0;
  sign:=0;
  num:=0;
  d:=0;
  i:=1; while TRUE do begin
    if (i<=length(s)) and ((s[i] in ['0'..'9'])) then begin
      num:=num*10+(ord(s[i])-ord('0'));
      d:=d+1;
      end
    else begin
      if (d>0) then begin
        if sign<0 then num:=-num;
        write(num, ' ');
        sum:=sum+num;
        n:=n+1;
        sign:=0;
        num:=0;
        d:=0;
        end;
      if (i<=length(s)) then
        case s[i] of
          '-': sign:=-1;
          '+': sign:=+1;
          else sign:=0;
          end
      else
        break;
      end;
    i:=i+1;
    end;
  writeln;
 
  writeln;
 
  if n=0 then
    writeln('Чисел в строке нет')
  else
    writeln('Среднее арифметическое = ', sum/n:0:2);
    
  readln;
end.
- здесь роль флагов исполняют sign и d - разберись, как происходит взаимодействие.
1
ZoyaN
0 / 0 / 0
Регистрация: 10.12.2010
Сообщений: 2
12.12.2010, 19:57  [ТС] #6
спасибо за помощь
0
12.12.2010, 19:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2010, 19:57
Привет! Вот еще темы с решениями:

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

Дано четырехзначное число. Выведите на экран TRUE, если произведение крайних цифр этого числа кратно сумме цифр числа
Помогите решить простые задачи мозги кипят: 4-я. Дано четырехзначное число....

Числа у которых сумма всех цифр совпадает с суммой цифр данного числа.
Решить с помощью процедуры. Дано натуральное число N. Найти и вывести все...

Перевод из десятичной системы счисления в двоичную(целые,дробные)
Всем доброго. Прошу помочь, нужна программа для перевода из десятичной (как...


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

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

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