М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
katenautkina69
katenautkina69
04.02.2023 01:01 •  Информатика

Дан массив а(m), меньше или равно 20. ввести на печать сумму элементов массива, если она превосходит число 50, в противном случае вывести в печать исходный массив. написать программу , только с интернета не брать, там программы не работают, свою программу я написала, но что-то выдаёт не так, , . program mass5v; uses crt; const nmax=20; type mas=array[1..nmax] of integer; var a: mas; i,m,s: integer; am, con: text; begin clrscr; assign(am,'am.txt'); assign(kon,'kon.txt'); reset(am); rewrite(kon); write('введите размер массива m='); readln(m); s: =0; for i: =1 to m do begin read(am, a[i]); s: =s+a[i]; end; writeln; writeln(kon); if s< =50 then begin writeln('сумма элементов менее 50, вывод исходного массива); for i: =1 to m do begin write('a[',i,']=',a[i],' '); write(kon,'a[',i,']=',a[i],' '); end; end else writeln('сумма элементов массива более 50 и равна: s=',s); close(am); close(kon); readkey; end.

👇
Ответ:
Pakimon4ikYT
Pakimon4ikYT
04.02.2023
Uses crt;
const
    nmax = 20;

var
    A: array[1..nmax] of integer;
    I, m, s: integer;
    Am, kon: text;

begin
    Clrscr;
    Assign(Am, 'Am.txt');
    
    {раскоментировать для записи массива в файл}
    {Rewrite(Am);
    m := Random(nmax - 5) + 5;
    for i := 1 to m do
        Writeln(Am, Random(20));
    Close(Am);}
    
    {считывание данных из файла}
    Reset(Am);
    s := 0;
    m := 0;
    while not eof(Am) do
    begin
        m := m + 1;
        Readln(Am, A[m]);
        s := s + A[m];
    end;
    Close(Am);
    
    Assign(kon, 'kon.txt');
    Rewrite(kon);
    
    if s > 50 then
        Writeln('Сумма элементов массива более 50 и равна: s=', s)
    Else
    begin
        Writeln('Сумма элементов менее 50, вывод исходного массива');
        for i := 1 to m do
        begin
            Writeln('A[', i, ']=', A[i], ' ');
            Writeln(kon, 'A[', i, ']=', A[i], ' ');
        end;
    end;
    
    Close(kon);
    Readkey;
end.
4,4(53 оценок)
Открыть все ответы
Ответ:
Eldar225566
Eldar225566
04.02.2023
Запишу сначала за вас условие до конца:
Первая строка ввода содержит два числа A и B, разделенных пробелом (1 ≤ A, B ≤ 10 000 000).Выведите все возможные значения для количества емкостей по 60 литров, которые окажутся заполненными (в том числе одна возможно частично), в порядке возрастания или число −1, если значения A и B противоречат друг другу, то есть они были записаны неверно.

Теперь к вопросам по форме. 
Во-первых, если в условии указаны ограничения на входные данные, им можно верить, проверять, что 1 <= A, B <= 10000000 не обязательно. 
Во-вторых, научитесь пользоваться &&, ||, это позволит не дублировать код. 4 раза написанное else Console.WriteLine("-1"); не очень читать.

А уже теперь по сути.
Ваше условие противоречивости условия |50A - 70B| < 50 нехорошее. Если общий объем колы, например, 141, то A = 3, B = 3, но при этом |50A - 70B| = 60, что больше 50.

Смотрю дальше.
если 50A < 70B, то если 50A не делится на 60, то ответ [(50A - 49)/60] + 1 или [50A/60] + 1 (если это одно и то же, не важно). Это тоже как минимум не очевидно: представим, что [(70B-69)/60] + 1 оказался больше, чем [(50A-49)/60] + 1. Тогда ответ точно неверен.

Какие были бы мои рассуждения:
Поищем, какое могло бы быть общее количество колы. Пусть её N, тогда
50(A - 1) < N <= 50A
70(A - 1) < N <= 70B
Тогда max(50A - 50, 70B - 70) < N <= min(50A, 70B). 
Если max(50A - 50, 70B - 70) >= min(50A, 70B), то решений нет, надо выводить -1. Иначе думаем дальше.
Строгое неравенство иметь что-то не хочется, сделаем из него нестрогое. Если добавлю к левой части 1, то количество 60-литровых ёмкостей явно не поменяется, зато неравенство станет нестрогим. Пусть так и будет, раз ответ не меняется. Только в проверке равенство поменяю на строгое.
max(50A - 50, 70B - 70) + 1 <= N <= min(50A, 70B)
Теперь просто считаем число ёмкостей слева, справа, и выводим все числа от первого до второго.

Поняв всё это, просто превращаем слова в программу.
using System;
class CocaCola
{
  public static void Main (string[] args)
  {
    int A = int.Parse(Console.ReadLine()), 
        B = int.Parse(Console.ReadLine());
    int lowerLimit = Math.Max(50 * A - 50, 70 * B - 70) + 1;
    int upperLimit = Math.Min(50 * A, 70 * B);
    if (lowerLimit > upperLimit)
    {
      Console.Write(-1);
      return;
    }
    for (int i = (int)Math.Ceiling(lowerLimit / 60.0); i <= Math.Ceiling(upperLimit / 60.0); i++)
      Console.Write("{0} ", i);
  }
}
4,4(49 оценок)
Ответ:
EnoTProKoP
EnoTProKoP
04.02.2023
1. Ряд строится по принципу золотого сечения. Формула для вычисления члена последовательности такая:
x(2)=x(1)+1,
x(3)=x(2)+2,
...
x(n)=x(n-1)+n-1

В нашем алгоритме для вычисления следующего члена последовательности будем запоминать текущий член последовательности в переменной kp.
Затем получаем очередной член последовательности суммируя kp и переменную цикла i - 1. Делаем вычисления, выводим на экран и переписываем переменную kp  новым значением.
 
var i,k,kp:integer;
begin
kp:=1;
for i:=1 to 10 do begin
  k:=kp+i-1;
  kp:=k;
  writeln(k:5, k*k:6, k*k*k:8);
  end;
end.
4,4(95 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ