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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2008, 11:43   #1
11111
Пользователь
 
Регистрация: 14.10.2007
Сообщений: 25
По умолчанию возрат суммы

Помогите пожайлуста разобратся с этой задачей. Описать функцию, которая возвращает сумму К=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.
11111 вне форума Ответить с цитированием
Старый 12.01.2008, 12:39   #2
11111
Пользователь
 
Регистрация: 14.10.2007
Сообщений: 25
По умолчанию

Вот я изменил программу . только тут нужно вычесть максимальный элемент. Только тут нужно сделать так чтоб выводилась сразу сумма. А сумма минимальных находится просто сложением без максимального чмсла, тюею не нужно задавать какое именно кол-во минимальных цифр нужно порлучить
Код:
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.
11111 вне форума Ответить с цитированием
Старый 12.01.2008, 12:56   #3
Vituskz
Пользователь
 
Регистрация: 08.12.2007
Сообщений: 32
По умолчанию

я что та не совсем условие задачи понял... надо найти просто сумму массива или как?...и что значит
Цитата:
наименьших цифр, входящих в запись числа типа Longint
?
Vituskz вне форума Ответить с цитированием
Старый 12.01.2008, 13:04   #4
11111
Пользователь
 
Регистрация: 14.10.2007
Сообщений: 25
По умолчанию

это число должно находится в приделах longint это от -2147483648 до +217483647. а задание сводится к тому чтоб сложить все элементы кроме максимального. например 1236412 максимальный элемент 6 значит складываем 1+2+3+4+1+2=12 и должно выводится сумма наименьших равна 12
11111 вне форума Ответить с цитированием
Старый 12.01.2008, 13:13   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Тебя как всегда трудно понять. В первом коде у тебя несколько ошибок, в том числе и та о которой ты подумал, раздел переменных всегда идет раньше раздела описантя подпрограмм. Очень запутана и налогична сама функция. Вот как можно решить твое первое условие. Посмотри структуру кода, разберись и сам исправишь все свои ошибки.
Код:
program sum_cif;
uses crt;
var n:longint;  //раздел переменных
    k:integer;
function get_sum(n:longint;k:integer):integer;
var a,i,j,x,u,sum:integer;
    b:array[1..10] of integer; //тип Longint на более 10 цифр
begin
a:=0;
   while n>0 do  //разделяем число на цифры
     begin
        u:=n mod 10;     {15287=1,5,2,8,7}
        a:=a+1;
        b[a]:=u;   //создаем массив из цифр
        n:=n div 10;
     end;
   for i:=1 to a-1 do    //сортируем его по возрастанию
     begin                 {1,5,2,8,7=8,7,5,2,1}
        for j:=1 to a-1 do
           if b[j]>b[j+1] then
              begin
                 x:=b[j];b[j]:=b[j+1];b[j+1]:=x;
              end;
     end;
  sum:=0;
  for i:=1 to k do   //находим сумму первых К цифр
  sum:=sum+b[i];
  Get_sum:=sum;      //присваиваем значение функции
end;
begin
   clrscr;
   write('n=');readln(n);   //вводим исходные данные
   write('k=');readln(k);
   writeln('sum=',Get_sum(n,k));  //выводим результат
readln;
end.
puporev вне форума Ответить с цитированием
Старый 12.01.2008, 13:23   #6
11111
Пользователь
 
Регистрация: 14.10.2007
Сообщений: 25
По умолчанию

а со вторым кодом что нужно сделать?
11111 вне форума Ответить с цитированием
Старый 12.01.2008, 13:25   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Во втором случае добавляешь в функцию вместо сортировки поиск максимального элемента
Код:
max:=b[1];imax:=1;
for i:=1 to a do
if  b[i]>max then 
    begin  
      max:=b[i];imax:=i;
    end;
находишь сумму без максимального элемента
Код:
sum:=0;   
  for i:=1 to a do   //находим сумму первых К цифр   
  sum:=sum+b[i];   
  Get_sum:=sum-b[imax];      //присваиваем значение функции   
end;
Естественно в разделе локальных переменных функции меняешь список переменных.
puporev вне форума Ответить с цитированием
Старый 12.01.2008, 14:03   #8
11111
Пользователь
 
Регистрация: 14.10.2007
Сообщений: 25
По умолчанию

Вот что получилось только выдаёт ошибку.
Код:
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.
11111 вне форума Ответить с цитированием
Старый 12.01.2008, 14:53   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ты понял, что здесь написал?
Цитата:
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;
Это гибрид из сортировки и поиска максимального элемента, а я писал вставить поиск max ВМЕСТО сортировки.
Убери
for j:=1 to n-1 do
for i:=1 to n-j do begin
if m[i]>m[i+1] then
begin
end;
puporev вне форума Ответить с цитированием
Старый 12.01.2008, 15:04   #10
11111
Пользователь
 
Регистрация: 14.10.2007
Сообщений: 25
По умолчанию

У меня всёравно выдаётся ошибка "(" expected той строке get_sum:=s-m[imax];
Код:
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.

Последний раз редактировалось 11111; 12.01.2008 в 16:14.
11111 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск суммы Janette Помощь студентам 2 24.02.2008 12:56
Поиск суммы Janette Паскаль, Turbo Pascal, PascalABC.NET 2 23.02.2008 21:39
Нахождение суммы в массиве. PHP Айвенго Помощь студентам 3 28.01.2008 19:46
Паскаль и суммы SEREG@ Помощь студентам 6 18.12.2007 21:11
StringGrid, вычисление суммы Gorin Компоненты Delphi 5 23.08.2007 19:44