Расскажу вам небольшой секрет, который сохранит вам многие часы жизни:
Если вам дали задание написать что-то на ассемблере, то не надо писать это на ассемблере — напишите код на C, а потом скомпилируйте и посмотрите, какой ассемблерный код сгенерировал компилятор.
Например, в вашем случае, пишем нужную программу на C:
void calc(void) < /* Значения могут быть любыми. */ int a = 2; int b = 3; int c = 5; int d = 7; int result = (4 * b + c — d) * (2 * b + 5 * (3 * c + 5 * a)) / (4 * a * b + 5 * c — 8 * d); >
Затем компилируем её с выключенной оптимизацией ( -O0 ) и с выдачей ассемблерного листинга ( -S ). Флаги -fno-asynchronous-unwind-tables и -fno-dwarf2-cfi-asm сделают ассемблерный листинг немного чище:
# p.c — название файла с исходным кодом gcc -O0 -S -fno-asynchronous-unwind-tables -fno-dwarf2-cfi-asm p.c
На выходе получаем вот такой вот ассемблерный листинг:
Иногда бывает удобнее использовать такой инструмент как Compiler Explorer.
Проверка GPTchat на присутствие ИИ. Сможет ли он написать программу которая работает?
Если вы занимаетесь для себя и хотите научится писать на ассемблере — все то же самое. Попытайтесь написать программу сами, если не получается, напишите тот же самый код на C и посмотрите, во что компилятор его перевел, какие конструкции ассемблера он использовал.
Пробуйте переводить C в ассемблер в ручную: берете распечатку кода на C и на соседнем листочке пишете ассемблерный код (можно и без распечатки, конечно). Не обязательно переводить большие программы, можете начать с небольших кусочков кода типа
int a = 4; // movl $4, -4(%rbp) int b = 7; // movl $7, -8(%rbp) // movl -4(%rbp), %edx // movl -8(%rbp), %eax // addl %edx, %eax int c = a + b; // movl %eax, -12(%rbp)
int a = 5; // movl $5, -4(%rbp) // jmp .L2 // .L3: while (a > 0) < // movl $0, %eax foo(); // call foo a—; // subl $1, -4(%rbp) >// .L2: // cmpl $0, -4(%rbp) // jg .L3
Источник: ru.stackoverflow.com
Написать программу которая вычисляет
а) первых n натуральных чисел
n = int (input(‘n>>’))
sum = 0
for x in range (1, n+1):
sum += x
print (sum)
б) квадратов первых n натуральных чисел
n = int (input(‘n>>’))
sum = 0
for x in range (1, n+1):
sum += x**2
print (sum)
в) всех чётных чисел в диапазоне от 1 до n
n = int (input(‘n>>’))
sum = 0
for x in range (1, n+1):
if x % 2 == 0:
sum += x
print (sum)
г) всех двузначных чисел
n = int (input(‘n>>’))
sum = 0
for x in range (1, n+1):
Сумма факториалов. Напишите программу, которая выводит значение суммы 1!+2!+3!+…+n! | Python
if x >= 10 and x < 100:
sum += x
print (sum)
Источник: 5urokov.ru
Сумма цифр трехзначного числа
Как извлечь отдельные цифры из числа? Если число разделить нацело на десять, в остатке будет последняя цифра этого числа. Например, если 349 разделить нацело на 10, то получится частное 34 и остаток 9. Если потом 34 разделить также, получится частное 3 и остаток 4; далее при делении 3 на 10 получим частное 0 и остаток 3.
В языках программирования почти всегда есть две операции:
1) нахождение целого при делении нацело,
2) нахождение остатка при делении нацело.
В языке программирования Python первая операция обозначается // (двумя знаками деления), а вторая — % (знаком процента). Например:
>>> 34 // 10 3 >>> 34 % 10 4
Примечание. Операции деления нацело и нахождения остатка с точки зрения арифметики применимы только к целым числам. Но в Python их можно использовать и по отношению к дробным числам:
>>> 34.5 % 10 4.5 >>> 34.5 // 10 3.0 >>> 34.5 // 12.9 2.0
Алгоритм нахождения суммы цифр трехзначного числа abc (где a — сотни, b — десятки и c — единицы) можно описать так:
- Найти остаток от деления abc на 10, записать его в переменную d1 . Это будет цифра c.
- Избавиться от цифры c в числе abc, разделив его нацело на 10.
- Найти остаток от деления ab на 10, записать его в переменную d2 . Это будет цифра b.
- Избавиться от цифры b в числе ab, разделив его нацело на 10.
- Число a однозначное. Это еще одна цифра исходного числа.
- Сложить оставшееся число a со значениями переменных d1 и d2 .
n = input(«Введите трехзначное число: «) n = int(n) d1 = n % 10 n = n // 10 d2 = n % 10 n = n // 10 print(«Сумма цифр числа:», n + d2 + d3)
Пример выполнения программы:
Введите трехзначное число: 742 Сумма цифр числа: 13
Однако, если нам известно, что число состоит из трех разрядов (цифр), есть немного другой способ извлечения цифр из числа:
- Остаток от деления на 10 исходного числа дает последнюю цифру числа.
- Если найти остаток от деления на 100 исходного числа, то мы получи последние две цифры числа. Далее следует разделить полученное двухзначное число нацело на 10, и у нас окажется вторая цифра числа.
- Если исходное трехзначное число разделить нацело на 100, то получится первая цифра числа.
n = input(«Введите трехзначное число: «) n = int(n) d1 = n % 10 d2 = n % 100 // 10 d3 = n // 100 print(«Сумма цифр числа:», d1 + d2 + d3)
В Python данную задачу можно решить без использования арифметических действий, а путем извлечения из исходной строки отдельных символов с последующим их преобразованием к целому.
n = input(«Введите трехзначное число: «) # Извлекается первый[0] символ строки, # преобразуется к целому. # Аналогично второй[1] и третий[2]. a = int(n[0]) b = int(n[1]) c = int(n[2]) print(«Сумма цифр числа:», a + b + c)
Задача может быть усложнена тем, что число вводится не пользователем с клавиатуры, а должно быть сгенерировано случайно. Причем обязательно трехзначное число.
В этом случае надо воспользоваться функциями randint() , randrange() или random() из модуля random . Первым двум функциям передаются диапазоны: randint(100, 999) , randrange(100, 1000) . Получить трехзначное число, используя random() немного сложнее:
# Функция random генерирует # случайное дробное число от 0 до 1 from random import random # При умножении на 900 получается случайное # число от 0 до 899.(9). # Если прибавить 100, то получится # от 100 до 999.(9).
n = random() * 900 + 100 # Отбрасывается дробная часть, # число выводится на экран n = int(n) print(n) # Извлекается старший разряд числа # путем деления нацело на 100 a = n // 100 # Деление нацело на 10 удаляет # последнюю цифру числа. # Затем нахождение остатка при # делении на 10 извлекает последнюю цифру, # которая в исходном числе была средней. b = (n // 10) % 10 # Младший разряд числа находится # как остаток при делении нацело на 10. c = n % 10 print(a+b+c)
X Скрыть Наверх
Решение задач на Python
Источник: younglinux.info