Иллюстрированный самоучитель по С++ для начинающих

Решения (задачи 180-197)

Задача 182.

// Итоги летней Олимпиады 2000 года
#include "stdio.h" #include "conio.h" #include "string.h"
idefine NC 10 void main()
//количество стран-участниц
char *strana[] = {"Австрия\0","Германия\0", "Канада\0","Китай\0","Корея\0",
"НорвегияХО","Россия\0", "С311А\0", "Франция\0", "Япония\0" };
// таблица результатов
int result[NC+1][5];
// NC+1-ая строка используется как буфер
// при сортировке таблицы
int i,j;
int max; // номер строки таблицы, в которой
// количество очков максимально char buf[9]; // используется при сортировке
printf("\n*** Сидней 2000 ***\п");
printf("Введите в одной строке количество золотых,\п");
printf("серебряных и бронзовых медалей\п");
// ввод исходных данных for (i = 0; i < NC; i++)
printf("%s › ", strana[i]);
scanf("%i%i%i", &result[i][0], // золотых
&result[i][1], // серебряных
Sresult[i][2]); // бронзовых
// вычислим общее количество медалей и очков
for (i = 0; i < NC; i++)
{
result[i] [3] =
result[i] [0]+result[i] [1]+result[i] [2]; result[i] [4] =
result[i][0]*7+result[i] [1]*6+result [i] [2]*5;
// сортировка массива в соответствии с количеством очков
// методом простого выбора for (i = 0; i < NC-1;
//в части таблицы, начиная со строки i,
// найти j-ую строку, в которой элемент // result[j][5] максимальный
max = i; // пусть это строка с номером i for (j = i+1; j < NC; j++)
if (result[j][4] > result[max][4]) max = j;
// обменяем 1-ую строку со строкой с номером max
//в качестве буфера используем последнюю cpy(buf,strana[i]);
strcpy(strana[i],strana[max]); strcpy(strana[max],buf);
for (j = 0; j < 5; j++)
result [NC] [j] = result [i] [j]; for (j = 0; j < 5; j++) #
result[i][j] = result[max][j]; for (j = 0; j < 5; j++)
result[max][j] = result[NC][j];
// здесь таблица упорядочена
printf("Итоги летней Олимпиады в Сиднее, 2000 г.\п");
printf("%12s%8s%8s%8s%8s%8s","Страна","Золото",
"Серебро","Бронза","Всего","Очков"); for (i =0; i < NC; i++) {
printf("\n%12s", strana[i]); for (j = 0; j < 5; j++)
printf("%8i", result[i][j]);
printf("\п Для завершения нажмите Enter");
getch();

Задача 183.

// Игра "Угадай число"
#include "stdio.h" #include "conio.h" #include "stdlib.h" #include "time.h"
#define N 3 // уровень сложности – количество цифр в числе
#define DEBUG // режим отладки
void main ()
char igrok[N]; // комбинация игрока
char comp[N]; // комбинация компьютера
int a[N]; // a[i] == 1, если i-ая цифра
// компьютера совпала с одной из цифр игрока
int ugad; // угадано чисел
int mesto; //из них на своих местах
int i,j;
time t t;
// индексы
printf("Хп Компьютер задумал трехзначное число.\п");
printf("Вы должны его отгадать. \п");
printf("После ввода очередного числа вам будет ");
printf("сообщено, сколько цифр угадано, и сколько");
printf("из них находится на своих местах.\п");
printf("После ввода числа нажимайте Enter\n");
srand((unsigned)time(&t));
for (i = 0; i < N; i++) // компьютер "задумывает" число
comp[i] = rand() % 10 + 48; // 48 – код символа '0'
#ifdef DEBUG
printf("Компьютер задумал: "); for (i = 0; i < N; i++)
printf("%c", comp[i]); printf("\n"); ttendif do {
printf("\пВаш вариант › ");
scanf("%s", Sigrok); // массив вводим как строку
for (i = 0; i < N; i++) a[i] = 0;
// проверим, сколько цифр угадано ugad =0;
for (i =0; i < N; i++) // каждую цифру игрока for (j = 0; j < N; j++) // сравним с цифрами
// компьютера
if ((igrok[i] ==comp[j]) &&!
{ ugad++;
] = 1; // запретим сравнивать
// эту цифру компьютера с оставшимися, // еще не проверенными, цифрами игрока
break;
}
// проверим, сколько на своих местах
mesto = 0;
for (i =0; i < N; i++)
if (igrok[i] == comp[i]) mesto++;
printf("Угадано: %i. На своих местах: %i", \
ugad, mesto);
} while ((ugad < N) ]| (mesto < N));
printf("\n*** ВЫ УГАДАЛИ ЧИСЛО! ***\п");
printf("\п Для завершения нажмите Enter");
getch ();
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.