Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 12.01.2008, 12:40   #1 (permalink)
1111
Member
 
Регистрация: 27.11.2007
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Помогите пожайлуста разобратся с этой задачей. Описать функцию, которая возвращает сумму К=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.
1111 вне форума   Ответить с цитированием

Старый 12.01.2008, 12:40
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ваша тема имеет сходства с данными топиками

Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл
Вычислить значение суммы
Нахождение суммы, цикл. Паскаль.

Старый 12.01.2008, 13:39   #2 (permalink)
1111
Member
 
Регистрация: 27.11.2007
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вот я изменил программу . только тут нужно вычесть максимальный элемент. Только тут нужно сделать так чтоб выводилась сразу сумма. А сумма минимальных находится просто сложением без максимального чмсла, тюею не нужно задавать какое именно кол-во минимальных цифр нужно порлучить
Код:
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.
1111 вне форума   Ответить с цитированием
Старый 12.01.2008, 14:21   #3 (permalink)
TOMMY
Member
 
Регистрация: 12.01.2008
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Что именно в задаче дано и что надо вывести?
(Насколько я понял с условия: Дано 56789 2 Вывод: 5+6=11)
TOMMY вне форума   Ответить с цитированием
Старый 12.01.2008, 14:52   #4 (permalink)
1111
Member
 
Регистрация: 27.11.2007
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

надо делать по второму коду даётся число 43127 и должна выводится сумма наименьших 4+3+1+2=10 т.е должно вывестись число 10
1111 вне форума   Ответить с цитированием
Старый 12.01.2008, 15:22   #5 (permalink)
1111
Member
 
Регистрация: 27.11.2007
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вот что у меня получилось только всёравно выдаёт ошибку.
Код:
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.
1111 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 12.01.2008, 16:31   #6 (permalink)
TOMMY
Member
 
Регистрация: 12.01.2008
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ошибки, которые я нашел:
1)У тебя переменная sum не описана в разделе var и потому выдает ошибку в
строке : get_sum:=sum-m[imax];
2)Нету начального значения переменной sum и потому с ней нежелательно что-то делать.(В даном случае отнимать от етой переменной какое-то значение):

Ошибки больше выдавать не будет
TOMMY вне форума   Ответить с цитированием
Старый 12.01.2008, 17:16   #7 (permalink)
1111
Member
 
Регистрация: 27.11.2007
Сообщений: 20
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

я немного подправил но всёравно возникает эта же ошибка
Код:
var
ch:longint;
procedure get_sum(var l:longint);
var
i,j,n,s,max,imax:integer;
m:array[0..9] of integer;
Begin
    i:=1;
    while l>0 do
        begin
           m[i]:=l mod 10;
           l:=l div 10;
           n:=i;
           inc(i)
        end;

               max:=m[1]; imax:=1;
               for i:=1 to n do
               if m[i]>max then
                  begin
                    max:=m[i]; imax:=i
             end;

             s:=0;
           for i:=1 to n do
               begin
                    s:=s+m[i];
                get_sum:=s-m[imax];
               end;
           end;
BEGIN
read(ch);
get_sum(ch)
End.
1111 вне форума   Ответить с цитированием
Старый 12.01.2008, 18:33   #8 (permalink)
TOMMY
Member
 
Регистрация: 12.01.2008
Сообщений: 22
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

попробуй объявить процедуру - функцыей
Код:
 procedure get_sum(var l:longint);
поменяй на
Код:
 function get_sum(l:longint):longint;
TOMMY вне форума   Ответить с цитированием
Старый 22.09.2009, 20:46   #9 (permalink)
mihaadmin23
Member
 
Регистрация: 09.09.2009
Сообщений: 30
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 0
По умолчанию интернет в сети

В локальной сети интернет от сервера. Как узнать какая машина и в каком количестве (кило-, мегабайт) его потребляет? (желательно без стороннего ПО). На сервере ОС - Windows 2003 Server.
Короче нужно организовать скажем так наблюдение скока и куда потребляется
mihaadmin23 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 18:14.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.