Код прекреплен к ответу, всё прокоментрировано. Так же продублирован в коментариях. Если есть вопросы, велком в те же коментарии.
З.Ы.
Учимся правильно:
а. Декомпозировать задачу (разбивать глобальную задачу, на максимально не зависимые под задачи)
б. Выносить в универсальные функции участки кода, которые можем реюзать потом (вытекает из пункта выше)
в. Чему учиться - где учиться? Доучивайте процедурку уже, по основным темам всем есть в интернете специализированные сайты. Есть вопросы какие? - Велком в ЛС. Как доучите (вам хватит с головой месяц для основ, если раз в два дня что-то делать будете вечером) - переходите на ООП, это все на чем зыждется современное программирование, тут уже для вас открываются книги:
- Шилдт Самоучитель C++ 3 издание (если вы возьметесь за C++)
- Маерс 55 правил (там примеры на Java, но вы легко разберетесь, все понятно)
- Фаулер Код с душком (тоже вроде примеры на Java, но как и предыдущее универсально в принципе)
г. Если планируете работать по специальности ищите в интернете по таким ключам: Паттерны GOF/GRASP/LISP, Работа с динамической памятью, Наследование/динамическая типизация (это просто то, что у вас должно просто сидеть на подкорке, конечно список далеко не полный, но пока будите знакомится с парадигмами ООП и плюсами, сами его интуитивно дополните).
Спасибо за отметку "Лучший ответ" и нажатую кнопочку "Спасибо" тут и в аккаунте (: