IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> возврат суммы
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Мужской

Репутация: -  0  +


Помогите пожайлуста разобратся с этой задачей. Описать функцию, которая возвращает сумму К=1,2,… наименьших цифр, входящих в запись числа типа Longint . Вот код только помоему он неправильно считает. Тут мне кажется вся проблема в К она поидее должна описыватся в var.
type
A=array[0 .. 9] of byte;

function get_sum(n: longint; k: integer): integer;
var
arr:A;
i,T,sum:integer;
begin
fillchar(arr, sizeof(arr), 0);
while n > 0 do begin
inc(arr[n mod 10]); n := n div 10;
end;

sum := 0; T := 0;
while k > 0 do begin
while arr[T] = 0 do inc(T);
inc(sum, T * arr[T]);
inc(T); dec(k);
end;
get_sum := sum;
end;

var
n: longint;
k: integer;
begin
write('vvedite chislo = '); readln(n);
write('vvedite kol-vo min chifar = '); readln(k);

writeln('summa = ', get_sum(n, k));
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Вот код только помоему он неправильно считает.
Пример неправильного подсчета приведи... Что вводишь, что выдает, и что по-твоему должно бы выдавать.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Мужской

Репутация: -  0  +


Что выводится
vvedite chislo = 142301
vvedite kol-vo min chifar = 3
summa = 4
а помоему должно получится 1+0+1=2
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Тогда тебе вот так надо сумму считать:

...
sum := 0; T := 0;
while k > 0 do begin
while arr[T] = 0 do inc(T);
repeat
inc(sum, T);
dec(arr[T]); dec(k);
until (k = 0) or (arr[T] = 0);
inc(T);
end;
...

 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Мужской

Репутация: -  0  +


Вот что у меня ещё получилось. только тут нужно вычесть максимальный элемент. Только тут нужно сделать так чтоб выводилась сразу сумма. А сумма минимальных находится просто сложением без максимального чмсла, тюею не нужно задавать какое именно кол-во минимальных цифр нужно порлучить
var
ch:longint;
procedure do_it(var l:longint);
var
i,j,n,s,min:integer;
m:array[1..25] of integer;
Begin
i:=1;
while l>0 do
begin
m[i]:=l mod 10;
l:=l div 10;
n:=i;
inc(i)
end;
for j:=1 to n-1 do
for i:=1 to n-j do begin
if m[i]>m[i+1] then
begin
min:=m[i];
m[i]:=m[i+1];
m[i+1]:=min
end; end;
s:=0;
for i:=1 to n do
begin
s:=s+m[i];
writeln(s)
end;
end;
BEGIN
read(ch);
do_it(ch)
End.


Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Ну, поскольку ты мое сообщение проигнорировал, почему бы мне не поступить так же? Занимайся изобретением велосипеда дальше...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Мужской

Репутация: -  0  +


я попробывал твоим методом только возникает ошибка. просто мне не нужно задавать кол-во минимальных элементов.

Сообщение отредактировано: snopy -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 61
Пол: Мужской

Репутация: -  0  +


Вооооот я ещё изменил программу но всёравно есть ошибка.
var  
ch:longint;
procedure get_sum(var l:longint);
var
i,j,n,s,max,imax:integer;
m:array[1..25] of integer;
Begin
i:=1;
while l>0 do
begin
m[i]:=l mod 10;
l:=l div 10;
n:=i;
inc(i)
end;
for j:=1 to n-1 do
for i:=1 to n-j do begin
if m[i]>m[i+1] then
begin
max:=m[1]; imax:=1;
for i:=1 to n do
if m[i]>max then
begin
max:=m[i]; imax:=i
end; end;
s:=0;
for i:=1 to n do
begin
s:=s+m[i];
get_sum:=sum-m[imax];
end;
end;
BEGIN
read(ch);
get_sum(ch)
End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
я попробывал твоим методом только возникает ошибка
Странно, правда? У меня программа отработала, а у тебя - ошибка (впрочем, как обычно, БЕЗ УТОЧНЕНИЯ - очень просто свалить все на ошибку, а главное - удобно: не придерешься, есть ошибка и ВСЕ ТУТ!!!)...

Приводи код, который выдал ошибку полностью + описание ошибки + название компилятора...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.01.2021 15:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name