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

10 видов монет достоинством a1..a10 - Turbo Pascal

15.05.2015, 05:51. Просмотров 929. Ответов 17
Метки нет (Все метки)

Даны натуральные числа, a1..a10. Предположим, что имеются 10 видов монет достоинством a1..a10. Обозначим через Bk-это число решения уравнений a1x1+..+a10x10=R, где Xi может принимать целые неотрицательные значения. Получить B1...B10... решение на паскаль
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2015, 05:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос 10 видов монет достоинством a1..a10 (Turbo Pascal):

У покупателя есть n монет достоинством H(1),..., H(n). У продавца есть m монет достоинством B(1),...,B(m)
У покупателя есть n монет достоинством H(1),..., H(n). У продавца есть m монет...

Определить сколько монет достоинством в 20 и 50 рублей и каковы их порядковые номера
В коллекции нумизмата не более чем 90 монет всех возможных...

Как наименьшим количеством монет можно выплатить N копеек?Предполагается,что в достаточном количестве имеются монеты достоинством 1,2.3.5.10,15,20,50
Дано натуральное число N.Как наименьшим количеством монет можно выплатить N...

Найти минимальное число монет достоинством в 50, 10, 5, и 1 копейку, необходимое для представения некоторой суммы
Найти минимальное число монет достоинством в 50, 10, 5, и 1 копейку,...

В озере водится несколько видов рыб. Три рыбака поймали рыб, представляющих некоторые из имеющихся видов
В озере водится несколько видов рыб. Три рыбака поймали рыб, представляющих...

Массив: Определить, сколько видов товара имеют стоимость меньшую, чем средняя стоимость всех видов товара.
В массиве записана информация о стоимости 20 видов товара. Определить, сколько...

17
Joy
Эксперт Pascal/Delphi
2119 / 1159 / 1418
Регистрация: 29.08.2014
Сообщений: 4,221
15.05.2015, 11:05 #2
Лучший ответ Сообщение было отмечено rechehvt как решение

Решение

rechehvt, а задание точно корректно написано?
Цитата Сообщение от rechehvt Посмотреть сообщение
a1x1+..+a10x10=R
тут может равно k вместо R?

Добавлено через 37 минут
решал не я:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
label 1;
var
  a,b,c:array[1..10] of integer;
  i,j,n,s,k:integer;
begin
  write('R=');readln(k);
  write('a1,a2...a10=');
  for i:=1 to 10 do begin read(a[i]);b[i]:=k div a[i];end;
1:s:=0;
  for i:=1 to 10 do s:=s+a[i]*c[i];
  n:=n+ord(s=k);
  for i:=10 downto 1 do begin
    if c[i]=b[i] then for j:=i to 10 do c[j]:=0
  else begin c[i]:=c[i]+1;goto 1;end;
  end;
  writeln(n);
end.
1
Никита4502
0 / 0 / 1
Регистрация: 20.11.2017
Сообщений: 22
24.11.2017, 05:04 #3
он ошибку выдает

Добавлено через 25 секунд
ошибку выдает
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
3858 / 2845 / 3631
Регистрация: 05.06.2014
Сообщений: 13,943
24.11.2017, 11:11 #4
Никита4502, проверено в fpc в режиме совместимости. Нет никаких ошибок.
0
Никита4502
0 / 0 / 1
Регистрация: 20.11.2017
Сообщений: 22
25.11.2017, 13:07 #5
ZX Spectrum-128, в Pascal ABC выдаёт ошибку в 11 строке "функция ORD с параметрами указанных типов не найдена".
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
3858 / 2845 / 3631
Регистрация: 05.06.2014
Сообщений: 13,943
25.11.2017, 16:53 #6
Никита4502, раздел Турбо Паскаля!!!
А вы работаете в Pascal ABC!!!
0
Никита4502
0 / 0 / 1
Регистрация: 20.11.2017
Сообщений: 22
26.11.2017, 04:46 #7
ZX Spectrum-128, а как тогда ее записать в паскале abc?
0
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
3858 / 2845 / 3631
Регистрация: 05.06.2014
Сообщений: 13,943
27.11.2017, 10:25 #8
Никита4502, именно в pabc? В pabc.net работает.
0
Никита4502
0 / 0 / 1
Регистрация: 20.11.2017
Сообщений: 22
27.11.2017, 11:43 #9
ZX Spectrum-128, мне в abc надо
0
Cyborg Drone
Модератор
5249 / 3116 / 2432
Регистрация: 17.08.2012
Сообщений: 10,070
28.11.2017, 00:21 #10
Никита4502, в Pascal ABC тип boolean порядковым не является. Замените
Pascal
11
  if s = k then inc(n);
0
Никита4502
0 / 0 / 1
Регистрация: 20.11.2017
Сообщений: 22
28.11.2017, 12:24 #11
Cyborg Drone, goto 1; и label 1 можно убрать? зачем мне метка? что значит downto?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
label 1;
var
  a,b,c:array[1..10] of integer;
  i,j,n,s,k:integer;
begin
  write('R=');
  readln(k);
  write('a1,a2...a10=');
  for i:=1 to 10 do begin read(a[i]);
  b[i]:=k div a[i];
  end;
1:s:=0;
  for i:=1 to 10 do s:=s+a[i]*c[i];
  if s = k then inc(n);
  for i:=10 downto 1 do begin
    if c[i]=b[i] then for j:=i to 10 do c[j]:=0
  else begin c[i]:=c[i]+1;
  goto 1;
  end;
  end;
  writeln(n);
end.
0
Cyborg Drone
Модератор
5249 / 3116 / 2432
Регистрация: 17.08.2012
Сообщений: 10,070
28.11.2017, 15:02 #12
goto и label убрать можно. Однако, замечу, что в данном случае применение goto оправдано. Без него, если не перерабатывать алгоритм, придётся вводить лишнюю переменную:
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
var
  a, b, c: array[1..10] of integer;
  i, j, n, s, k: integer;
  q: boolean;
begin
  write('R = ');
  readln(k);
  write('a1 a2 ... a10 = ');
  for i := 1 to 10 do
    begin
      read(a[i]);
      b[i] := k div a[i];
    end;
  readln;
  repeat
    s := 0;
    for i := 1 to 10 do s := s + a[i] * c[i];
    if s = k then inc(n);
    for i := 10 downto 1 do
      begin
        q := c[i] = b[i];
        if q
          then for j := i to 10 do c[j] := 0
          else begin
            inc(c[i]);
            break
          end
      end
  until q;
  writeln(n);
  readln
end.
Что значит downto? Ну, во-первых, оно значит, что Вы не потрудились прочитать хотя бы 50 страниц любой книжки по любом паскалю. А вообще, for ... downto ... do - это предопределённый цикл с автодекрементом параметра цикла. Короче, если написано to, значит, к i прибавляется 1 на каждой итерации цикла, если написано downto, значит, от i вычитается 1 на каждой итерации цикла.
0
Никита4502
0 / 0 / 1
Регистрация: 20.11.2017
Сообщений: 22
29.11.2017, 04:49 #13
Cyborg Drone, да мне до лампочки, лишь бы сдать, но спасибо.
0
Никита4502
0 / 0 / 1
Регистрация: 20.11.2017
Сообщений: 22
06.12.2017, 13:13 #14
Cyborg Drone, простите меня пожалуйста, сидел разбирался с этой задачей и не до конца ее понял. Вы бы не могли бы поставить к ней комментарии? Или объясните мне с 15 по 29 строчку.
0
Cyborg Drone
Модератор
5249 / 3116 / 2432
Регистрация: 17.08.2012
Сообщений: 10,070
06.12.2017, 17:30 #15
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

С комментариями:
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
//a[i] - достоинство i-й монеты
//b[i] - максимальное количество монет достоинством a[i],
//       сумма которых не превышает заданную стоимость k
//с[i] - текущее количество каждой монеты
//i, j - счётчики
//n    - количество найденных наборов
//s    - текущая сумма
//k    - целевая сумма
//q    - факт того, что текущее количество монет текущего достоинства достигло максимума
var
  i, j, n, s, k: integer;
  q: boolean;
begin
  write('R = ');
  readln(k); //ввод целевой суммы
  write('a1 a2 ... a10 = ');
  for i := 1 to 10 do //цикл ввода достоинств монет
    begin
      read(a[i]); //ввод достоигства i-й монеты
      b[i] := k div a[i]; //расчёт максимального количества монет a[i], помещающихся в целевую сумму
    end;
  readln;
  repeat //цикл перебора вариантов выплаты
    s := 0; //текущая сумма пока равна 0
    for i := 1 to 10 do s := s + a[i] * c[i]; //цикл подсчёта текущей суммы: к сумме добавляются цены текущих количеств монет
    if s = k then inc(n); //если текущая сумма достигла целевой суммы, то инкрементируем количество найденных
    for i := 10 downto 1 do //цикл формирования наборов
      begin
        q := c[i] = b[i]; //факт достижения максимального значения текущего количества i-й монеты
        if q //если количество i-х монет максимально
          then for j := i to 10 do c[j] := 0 //то обнуляем текущие количества от i-й монеты до последней
          else begin //иначе (если не максимально)
            inc(c[i]); //инкрементируем количество i-й монеты
            break //и досрочно выходим из цикла формирования наборов
          end
      end
  until q; //если последняя монета включена в сумму максималльным количеством, прекращаем формировать наборы
  writeln(n); //печатаем количество наборов
  readln
end.
0
Никита4502
0 / 0 / 1
Регистрация: 20.11.2017
Сообщений: 22
23.12.2017, 11:48 #16
Cyborg Drone, информатичка сказала, что 29 строчка неправильная, типо не бывает такого выражения. Что мне ей ответить на это? Программа то работает!
0
Puporev
Модератор
54136 / 41769 / 28877
Регистрация: 18.05.2008
Сообщений: 98,307
23.12.2017, 11:59 #17
Цитата Сообщение от Никита4502 Посмотреть сообщение
29 строчка неправильная,
Строка 29
Pascal
1
begin
Что тут может не работать?
0
Cyborg Drone
Модератор
5249 / 3116 / 2432
Регистрация: 17.08.2012
Сообщений: 10,070
25.12.2017, 23:00 #18
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Pascal
29
  until q;
Эта? Скажите преподавателю, что q - это булева переменная, и выход из цикла происходит тогда, когда значение этой переменной есть истина, то есть, тогда, когда q=true. И ещё скажите, что программа прекрасно компилируется, никакой ошибки строка 29 не вызывает, следовательно, такое выражение бывает.

Просто преподаватель Ваш привык видеть после until логическое выражение, типа until a > b, а то, что логическая переменная тоже является логическим выражением, до её мозгов пока не дошло. Типа, until q - и всё? Караул! А с чем же q сравнивается? А q и не надо с чем-то сравниваться, так как оно и есть результат сравнения (строка 21).
1
25.12.2017, 23:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2017, 23:00
Привет! Вот еще темы с решениями:

Определить, сколько видов товара имеют стоимость меньшую, чем средняя стоимость всех видов товара.
В массиве записана информация о стоимости 20 видов товара. Определить, сколько...

Даны два массива а(10) и b(10). Вычислить a1*b10+a2*b9+...+a10*b1
даны два массива а(10) и b(10) вычислить a1*b10+a2*b9+...+a10*b1

Наборы монет.
Не судите строго, за наглость, если таковая наблюдается), но не могли бы вы...

Все отрицательные компоненты вещественного вектора a(a1,a2,…,a10) заменить их квадратами
Помогите написать программу Все отрицательные компоненты вещественного вектора...


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

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

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