Тема: Чи можете пояснити частину коду?
Добрий день! Чи можна мені скинути тут код і запитати про те як працює його частина(сама пробувала розібратись, ніби трішки зрозуміла, але не до кінця)?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C → Чи можете пояснити частину коду?
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Добрий день! Чи можна мені скинути тут код і запитати про те як працює його частина(сама пробувала розібратись, ніби трішки зрозуміла, але не до кінця)?
ви самі вивчаєте програмування чи то в університеті задали?
дивлючись на попередні ваші теми це вам щось в університеті задали, тому питайте викладача.
хоча можете кинути, може хто і допоможе
Ну в університеті..
Ну дивіться, є код:
#include <stdio.h>
#include <stdlib.h>
typedef
struct Rom2Num { // створюємо структуру для збереження відповідності латинської букви і числа
int lat; // змінна для латинських букв
int num; // змінна для десяткових чисел
} ROMAN; // "новий" тип для Rom2Num
ROMAN acc[] = { {'M',1000},{'D',500},{'C',100}, // відповідні Римські числа для десяткових
{'L',50},{'X',10},{'V',5},{'I',1} };
int main()
{
system("chcp 1251"); // підключення кирилиці
system("cls");
int digit; // змінна для введення користувачем 10-ого числа
printf("\t *************************************************************** \n"
"\t Програма для подання десяткових чисел в Римській системі запису \n"
"\t *************************************************************** \n");
do {
printf("\n\t Введіть число:"); // використовуємо цикл для введення даних
scanf_s("%d", &digit);
if (digit < 0 || digit >= 4000) // цикл виконується до тих пір поки користувач не введе правильні дані
printf(" Введено невірні дані! Спробуйте ще раз.\n Дані повинні бути > 0 та < 4000! \n");
} while (digit < 0 || digit >= 4000);
int number, t = 2;
char result[20] = "", *pres = result; // створюємо змінну result для результату
ROMAN* promnum = acc; // promnum вказівник на масив acc
while (digit > 0) {
number = promnum->num; // у dec записуємо десяткове значення з масиву acc,
// за допомогою -> отримуємо доступ до елемента структури
while (digit >= number) {
digit -= number;
*pres++ = promnum->lat; // в res дописуємо значення у римській системі для decim з масиву асс
}
if (digit == 0) break;
number = promnum->num - (promnum + t)->num; // у dec записуємо наступне десяткове значення з acc
if (digit >= number) {
digit -= number;
*pres++ = (promnum + t)->lat;
*pres++ = promnum->lat;
}
promnum++; t = (t == 2 ? 1 : 2); // t- змінна для переходу між елементами масиву aсс;
}
printf("\t Ваше число в Римській СЧ: %s", result);
}
Мені не до кінця зрозуміло за змінну t, вона є вказівником на другий елемент елементу масиву?чи я мислю неправильно? і ще для чого нам її міняти(ну тобто, то вона 1, то вона 2). Буду дуже вдячна, якщо поясните як саме це працює. Дякую
Римські цифри бувають двох типів: 10n (I,X,C,M) і 5*10n (V,L,D). Перший тип може записуватися перед більшою цифрою, другий - ні. t, фактично, розрізняє ці два типи: іноді беремо число на 2 далі по масиву (для X - I, для M - C), іноді - на 1 (для V - I, для L - X).
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися