Проверьте программу на наличие плохого кода - C (СИ)
Формулировка задачи:
Добрый день. Проверьте программу,(может быть программы, которые я буду в дальнейшем выкладывать) на наличие плохого тона в программировании(говнокода). Я понимаю, что одну задачу можно решить разными способами.
Я сейчас учу программирование для себя. Сам уже несколько лет работаю системным администратором. По работе поднимал несколько сайтов на разных движках, иногда нужны были кое-какие корректировки в коде, я их делал. Так-же пишу скрипты на баше. Хотелось бы в будущем работать именно программистом, сейчас начал усиленно учить Си, как основу для будущего.
Делаю все чисто для себя самого, проверить меня некому, а в книгах, ответы даны не ко всем задачам. Буду благодарен за помощь, или корректировки.
Итак первая задача. из книги Дейтла № 3.17.
Задача
Из за высокой цены на бензин, водители интерессуются пробегом своих автомобилей. Некий водитель отследил несколько заправон своего автомобиля, записывая пройденное расстояние в милях и объем каждой заправки в галлонах. Разработайте программу для ввода пройденного расстояния в милях и объема каждой заправки в галлонах. Программа должна вычислять и отображать на экране кол-во пройденных миль на галлон, для каждой заправки автомобиля. После обработкти всей входной информации должно вычисляться и выводиться общая информация, об милях, литрах и расходе топлива, милей на галон по всем заправкам.
Единственное, я использовал литры и километры. Но тут не суть.
Программа полностью работающая, проверьте пожалуйста, если можно сделать ее как то по другому.
Спасибо.
#include <stdio.h> int main() { int zapravka, put, vsegokm, vsegotop, i; float rashod, rashodtotal, rashodarif; vsegotop = 0, vsegokm = 0, rashodtotal = 0, i = 0; while (zapravka != -1){ printf("Vvedite koli4estvo zapravlennonho d litrah(-1 exit)\n"); scanf ("%d", &zapravka); if (zapravka != -1){ printf("Vvedite rasstoyanie v kilimetrah\n"); scanf ("%d", &put); rashod = (float) put / zapravka; vsegokm = vsegokm + put; vsegotop = vsegotop + zapravka; printf("rashod topliva km-rov na 1 litr = %f\n", rashod); rashodtotal = rashod + rashodtotal; i++; } } printf("Vsego proydeno %d\n",vsegokm); printf("Vsego topliva potracheno %d\n",vsegotop); rashodarif = rashodtotal/i; printf("srednii rashod topliva %f\n",rashodarif); return 0; }
Решение задачи: «Проверьте программу на наличие плохого кода»
textual
Листинг программы
#include <stdio.h> int main () { int x=0, y=0, z=0, m=0, n=0; while ((m<=0) || (n<=0) || (x<=0) || (y<=0) || (z<=0)) { printf("enter door size M*N, \n"); scanf ("%d%d", &m, &n); printf ("enter box size X*Y*Z\n"); scanf ("%d%d%d", &x, &y, &z); if (m<=0 || n<=0 || x<=0 || y<=0 || z<=0) { printf("Reentr door or box size\n"); } } if ((y>m && x>n) || (y>m && z>n) || (z>n && x>m) || (x>m && y>n) || (z>n &&y>m) || (z>m && x>n)) { printf ("BOX does not pass\n"); } else { printf ("BOX passes\n"); } return 0; }
Объяснение кода листинга программы
- В начале программы объявляются переменные
x
,y
,z
,m
,n
типаint
и инициализируются значением 0. - Затем программа входит в цикл while, который будет выполняться до тех пор, пока любой из следующих условий истинно:
m
меньше или равно 0,n
меньше или равно 0,x
меньше или равно 0,y
меньше или равно 0,z
меньше или равно 0. - Внутри цикла программа запрашивает у пользователя ввод размеров двери
M*N
и размеров коробкиX*Y*Z
, используя функциюscanf
. - Затем программа проверяет, выполняется ли хотя бы одно из условий, указанных в цикле while. Если это так, программа выводит сообщение
Reentr door or box size
и цикл продолжается. - Если все условия выполняются, программа проверяет, проходит ли коробка через дверь, сравнивая
y
иm
,y
иz
,z
иm
,x
иm
,x
иy
,z
иy
. Если какое-либо из этих сравнений истинно, программа выводит сообщениеBOX does not pass
. В противном случае программа выводит сообщениеBOX passes
. - В конце программы возвращается 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д