Задачи и решения!
517
203
Огурчик (4) сказал(а):↑не, сейчас он поймет что обратная связь утихла и забьет на это дело. Опять пойдет отдыхать, ибо устал, потом ненароком запустит Лену121 или какие там цифры и все начинай сначала
Нажмите, чтобы раскрыть...Нет!
Сегодня буду доделывать калькуляторы чтобы они выдавали как они считают.
Типа чтобы всё решение показывало а не только результат.
Ты меня определенно радуешь
Попробуй заняться другими задачками, чтобы было интереснее!
Могу посоветовать сайт с задачками олимпиадного программирования: https://acmp.ru/index.asp?main=tasks (ссылка на архив задач)
Там можно отправлять свои решения и они буду автоматически проверяться.
Мне кажется тебе это будет интересно, а как бонус - будешь видеть сколько задачек решил
![]()
KeksovName сказал(а):↑Нажмите, чтобы раскрыть...
я протестировал 2 значения - 0.5 и 0.01, оно действительно правильно переводит, но в задании которое я тебе дал от пользователя требуется ввести лишь 1 число, а программа просит ввести 2 числа. задача не выполнена.
посмотри на скриншоте строчку #9, wholepart,fractional,number; а где пробелы потерял?
как договаривались, с меня
ascii1079 сказал(а):↑
я протестировал 2 значения - 0.5 и 0.01, оно действительно правильно переводит, но в задании которое я тебе дал от пользователя требуется ввести лишь 1 число, а программа просит ввести 2 числа. задача не выполнена.
посмотри на скриншоте строчку #9, wholepart,fractional,number; а где пробелы потерял?
как договаривались, с меня
Нажмите, чтобы раскрыть...Исправил ошибку с 0.
По поводу пробелов не понял, я использую Astyle он должен красиво всё делать.
А без второго вводимого числа невозможно сделать, в формуле нужно указать количество нулей.
И 0.053 превращается в 0.53 СРАЗУ как только вводишь значение,что в int что в double и float.
KeksovName сказал(а):↑По поводу пробелов не понял, я использую Astyle он должен красиво всё делать.
Нажмите, чтобы раскрыть...ты не astyle должен использовать, а руками когда код набираешь писать опрятно. Не можешь нормально код оформить - нечего вообще этим заниматься
KeksovName сказал(а):↑А без второго вводимого числа невозможно сделать, в формуле нужно указать количество нулей.
Нажмите, чтобы раскрыть...может тогда нужно использовать другую формулу? Какой прок в программе, которая требует ввести целую часть, дробную, количество нулей и тд? Мне мб и посчитать за нее? В задаче было явно указано: подается на вход число (один ввод), на выходе дробь (думаю если введено целое число, то продублировать его и указать, что дробной части нет). ВСЕ! Я хочу пользоваться программой, которая за меня все делает, а не в текстовые квесты играть
Огурчик (4) сказал(а):↑ты не astyle должен использовать, а руками когда код набираешь писать опрятно. Не можешь нормально код оформить - нечего вообще этим заниматься
может тогда нужно использовать другую формулу? Какой прок в программе, которая требует ввести целую часть, дробную, количество нулей и тд? Мне мб и посчитать за нее? В задаче было явно указано: подается на вход число (один ввод), на выходе дробь (думаю если введено целое число, то продублировать его и указать, что дробной части нет). ВСЕ! Я хочу пользоваться программой, которая за меня все делает, а не в текстовые квесты играть
Нажмите, чтобы раскрыть...Говорю же-это невозможно!
В формуле было явно сказано-нужно подсчитать количество нулей.
А это без дополнительного ввода нельзя сделать, потому-что 0.053 превращается(ВСЕГДА) в 0.53
А мне нужно подсчитать этот нуль, так что без проверки этого не сделать.
KeksovName сказал(а):↑Говорю же-это невозможно!
В формуле было явно сказано-нужно подсчитать количество нулей.
А это без дополнительного ввода нельзя сделать, потому-что 0.053 превращается(ВСЕГДА) в 0.53
А мне нужно подсчитать этот нуль, так что без проверки этого не сделать.
Нажмите, чтобы раскрыть...что за бред
как у тебя одно число превращается в другое? что ты вводишь?
звучит, как дичь
Код для перевода дробей#include
// Счетчик количества цифр дробной части
int counting_signs(double a) {
int count = 0;
while(a - (int) a != 0) {
a *= 10;
count++;
}
return count;
}
// Нахождение НОД
int nod_func(int a, int b) {
while(a != 0 && b != 0) {
if (a > b) {
a = a % b;
} else {
b = b % a;
}
}
return a + b;
}
int main()
{
double num, fractional;
int whole;
printf("Введите число: ");
scanf("%lf", &num);
whole = (int) num;
fractional = num - whole;
if(num - whole == 0) {
printf("Вы ввели целое число %d без дробной части", whole);
} else {
int count = counting_signs(num);
int multiplier = 1;
for(int i = 0; i < count; i++) {
fractional *= 10;
multiplier *= 10;
}
int nod = nod_func((int) fractional, multiplier);
fractional = (int) fractional / nod;
multiplier = multiplier / nod;
if(whole == 0) {
printf("Перевод в обычную дробь: %d/%d", (int) fractional, (int) multiplier);
} else {
printf("Перевод в обычную дробь: %d целых %d/%d", whole, (int) fractional, (int) multiplier);
}
}
return 0;
}
Мб что и коряво, но вроде суть простая и по условию задачи. @ascii1079 прошу размотать меня)
@KeksovName , что там по формулам невозможно?
num - число вводимое пользователем
whole - целая часть от этого числа
fractional - дробная часть
остальные думаю понятные. Не нравится мне куча (int), но нет времени переделывать. Мб позже
KeksovName сказал(а):↑Говорю же-это невозможно!
В формуле было явно сказано-нужно подсчитать количество нулей.
А это без дополнительного ввода нельзя сделать, потому-что 0.053 превращается(ВСЕГДА) в 0.53
А мне нужно подсчитать этот нуль, так что без проверки этого не сделать.
Нажмите, чтобы раскрыть...
запусти примерчик, почему ты говоришь что это невозможно?
я даже не писал этот код, а просто нашел его и скопировал
Огурчик (4) сказал(а):↑может тогда нужно использовать другую формулу? Какой прок в программе, которая требует ввести целую часть, дробную, количество нулей и тд? Мне мб и посчитать за нее? В задаче было явно указано: подается на вход число (один ввод), на выходе дробь (думаю если введено целое число, то продублировать его и указать, что дробной части нет). ВСЕ! Я хочу пользоваться программой, которая за меня все делает, а не в текстовые квесты играть
Нажмите, чтобы раскрыть...не гори, меняй своё отношение к персонажу, всех не спасти
@Огурчик (4) запустил твой код, не знаю зачем 90% работает, но нашел такое
Введите число: 101.1
Перевод в обычную дробь: 101 целых 0/1
а ожидал 101 1/10
лучше забей, исправлять не надо, пусть кекс займется отдалкой ЧУЖОГО кода и сам скажет что не так
Огурчик (4) сказал(а):↑Код для перевода дробей#include
// Счетчик количества цифр дробной части
int counting_signs(double a) {
int count = 0;
while(a - (int) a != 0) {
a *= 10;
count++;
}
return count;
}
// Нахождение НОД
int nod_func(int a, int b) {
while(a != 0 && b != 0) {
if (a > b) {
a = a % b;
} else {
b = b % a;
}
}
return a + b;
}
int main()
{
double num, fractional;
int whole;
printf("Введите число: ");
scanf("%lf", &num);
whole = (int) num;
fractional = num - whole;
if(num - whole == 0) {
printf("Вы ввели целое число %d без дробной части", whole);
} else {
int count = counting_signs(num);
int multiplier = 1;
for(int i = 0; i < count; i++) {
fractional *= 10;
multiplier *= 10;
}
int nod = nod_func((int) fractional, multiplier);
fractional = (int) fractional / nod;
multiplier = multiplier / nod;
if(whole == 0) {
printf("Перевод в обычную дробь: %d/%d", (int) fractional, (int) multiplier);
} else {
printf("Перевод в обычную дробь: %d целых %d/%d", whole, (int) fractional, (int) multiplier);
}
}
return 0;
}
Мб что и коряво, но вроде суть простая и по условию задачи. @ascii1079 прошу размотать меня)
@KeksovName , что там по формулам невозможно?
num - число вводимое пользователем
whole - целая часть от этого числа
fractional - дробная часть
остальные думаю понятные. Не нравится мне куча (int), но нет времени переделывать. Мб позже
Нажмите, чтобы раскрыть...кстати забавная история в том, что оно вообще завершается, только потому, что 10 делится на 2
по-хорошему конечно лучше просто попарсить текст и повыводить (не супер сложно на самом деле)
YoshkinKot сказал(а):↑кстати забавная история в том, что оно вообще завершается, только потому, что 10 делится на 2
Нажмите, чтобы раскрыть...Там прикол в том, что после цикла, где fractional множится count-раз на 10, получается double (1.000000), которое потом пуляется в функцию НОД меняя тип на инт в аргументе. Каким то Макаром оно становится int = 0, отчего далее неверно НОД считается. Место нашел, а сообразить не успел ещё. На работке почилю) думаю я с приведением типов начудачил. Надо теорию читать
@KeksovName , тебя бы с отладчиком.. помог бы
Последние 3 задачи.
Ввести время в формате чч:мм:сс, перевести в секунды
Ввести время в секундах, перевести в формат чч:мм:сс
И последняя задача:
Напечатать длину интервала между двумя моментами времени в пределах суток (все формате чч:мм:сс)
Все задачи решены, продолжаю смотреть курс теперь.
KeksovName сказал(а):↑Последние 3 задачи.
Ввести время в формате чч:мм:сс, перевести в секунды
Ввести время в секундах, перевести в формат чч:мм:сс
И последняя задача:
Напечатать длину интервала между двумя моментами времени в пределах суток (все формате чч:мм:сс)
Все задачи решены, продолжаю смотреть курс теперь.
Нажмите, чтобы раскрыть...Смотрю на 3 код и у меня кровь из глаз идет. Я кнч хз, программированием не занимаюсь, но нельзя было сделать так внешне(это чат гпт написал + он там еще чет поправил)
Досмотрел 2 видео из курса, теперь неделю решать задачи!
Новые задачи:
Задачи
Ввести длину отрезка с указанием шкалы измерения (c – сантиметры, i – дюймы), напечатать результат в обеих шкалах: например,
при вводе «2i» напечатать «2”= 5.08 cm»
при вводе «5.08c» напечатать «5.08 cm = 2”»
Ввести температуру с указанием шкалы измерения (C – шкала Цельсия, F– шкала Фаренгейта), напечатать результат в обеих шкалах (формула для пересчета c=(5/9)(f-32)): например,
при вводе «32F» или «32f» напечатать «32F= 0C»
при вводе «5C» или «5c» напечатать «5C= 41F»
Ввести два числа, напечатать, какое из них больше, или они равны
Ввести три числа, напечатать максимальное из них
Ввести два числа, напечатать, являются ли они взаимно простыми, или какое из них делится на другое
Образуют ли цифры четырехзначного числа арифметическую прогрессию?
«Идеальный» вес человека на 100 меньше, чем его рост в сантиметрах. Ввести рост и вес и напечатать рекомендацию по коррекции веса
Ввести номер месяца (1,…,12), напечатать время года (зима,…осень)
Ввести номер дня недели (1,…,7), напечатать, рабочий ли это день, суббота или воскресенье.
Ввести два значения времени в формате чч:мм:сс, напечатать, какое из них больше
Ввести номер года, напечатать, является ли он високосным
Ввести дату в формате дд.мм.гггг, напечатать следующую дату
Ввести дату в формате дд.мм.гггг, напечатать номер дня года, соответствующий этой дате (1 января – 1-й день и т.д.)
К введенному числу (от 0 до 99) приписать слово «копеек» в правильном падеже
К введенному числу (от 0 до 1000) приписать слово «рублей» в правильном падеже
К введенному числу (от 0 до 10…0.99) приписать слова «рублей» и «копеек» в правильном падеже
Дан круг радиуса r и квадрат со стороной h. Поместится ли круг в квадрат, или квадрат в круг, или ни один из них не вкладывается в другой.
Три числа являются длинами трех отрезков. Могут ли эти отрезки быть сторонами треугольника и, если да, то какой это будет треугольник (остро- прямо- или тупоугольный, равнобедренный, равносторонний и т.д.).
И важное условие-преподаватель сказал нужно всё это решить без ифов.
Незнаю получится ли, сегодня начну делать задания.
Ввести два числа, напечатать, какое из них больше, или они равны
Ввести три числа, напечатать максимальное из них
Ввести два числа, напечатать, являются ли они взаимно простыми, или какое из них делится на другое
«Идеальный» вес человека на 100 меньше, чем его рост в сантиметрах. Ввести рост и вес и напечатать рекомендацию по коррекции веса
Вот такие простые задания, с месяцами пока не смог.
А первые 2 решались на курсе.
KeksovName сказал(а):↑Два дня думаю над решением задачи, где надо число перевести в дробь!
У меня всё работает но мой друг, преподаватель по питону сказал что запрашивать количество нулей у пользователя нельзя!
И я думаю как это решить без запроса,пока не придумал.
Нажмите, чтобы раскрыть...у тебя есть scanf и sscanf
https://en.cppreference.com/w/c/io/fscanf
%s
%d
Короче, пробовал решать задачу без дополнительного ввода и обрёл кучу проблем!
Во первых число бывает очень большим, превращается в огромное иногда и это никак нельзя предсказать во вторых число нужно преобразовывать в массив и убирать ненужные элементы и в третьих МНЕ ЭТО НЕ НРАВИТСЯ.
Почему пользователь не может ввести дополнительную цифру и всё? Что его компьютером пришибёт или что?
Моё решение работает идеально, для всех чисел и я НЕ хочу его переделывать.
Вот что получилось(не работает):
А вот как было и всё-всё работает
Тема закрыта
-
ЗаголовокОтветов ПросмотровПоследнее сообщение
-
Сообщений:5
Просмотров:6
-
Сообщений:15
Просмотров:19
-
Сообщений:15
Просмотров:20
-
Сообщений:6
Просмотров:8
-
Сообщений:4
Просмотров:4



