Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Klowanza
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 11
#1

Задача на указатели.Указатель на указатель. - C++

02.12.2011, 00:29. Просмотров 906. Ответов 2
Метки нет (Все метки)

Таблица футбольного чемпионата задана квадратной матрицей порядка n, в которой все элементы, принадлежащие главной диагонали равны 0, а каждый элемент, не принадлежащий главной диагонали, равен 2, 1 или 0 (число очков набранных в игре: 2 – выигрыш, 1 – ничья, 0 – проигрыш).
а) найти число команд, имеющих больше побед, чем поражений;
б) определить номера команд, прошедших чемпионат без поражений;
в) выяснить, имеется ли хотя бы одна команда, выигравшая более половины игр. Память под массивы отводить динамически.
Нужна помощь. Пункт Б.
При выполнении использовать только указатель на указатель (те динам. матрицу). Без структур,
рандомов, без функций и строк.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2011, 00:29     Задача на указатели.Указатель на указатель.
Посмотрите здесь:

C++ Указатели и ссылки. Имя массива как указатель
C++ Указатель на указатель - разница способов
Сделать указатель на указатель NULL C++
Указатели на указатель C++
C++ Задача. Указатель this
Указатели( с элементами массива надо работать через указатель, а не индекс) C++
Зачем использовать Указатель на указатель? C++
C++ Константный указатель на константные данные (указатели)
Сортировка через ссылку на (указатель на указатели) C++
C++ Указатель на указатель внутри структуры
Указатель на указатель заполнение матрицы C++
Указатель на указатель заполнение матрицы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
02.12.2011, 14:17     Задача на указатели.Указатель на указатель. #2
Klowanza, а какие проблемы с пунктом б) ?
Цитата Сообщение от Klowanza Посмотреть сообщение
Нужна помощь. Пункт Б.
Считаете, в какой строке нулей не более 1 (т.к. по диагонале один 0 точно будет) и выводите номера этих строк...
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
02.12.2011, 16:12     Задача на указатели.Указатель на указатель. #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <cstdlib>
#include <ctime>
 
enum {
  LOOSE = 0,
  DRAW = 1,
  WIN = 2
};
 
void fillRandom(int **array, int size) {
  for (int i = 0; i < size; ++i)
    for (int j = i + 1; j < size; ++j) {
      array[i][j] = rand() % 3;
      if (array[i][j] == LOOSE)
        array[j][i] = WIN;
      else if (array[i][j] == WIN)
        array[j][i] = LOOSE;
      else
        array[j][i] = array[i][j];
    }
  for (int i = 0; i < size; ++i)
    array[i][i] = 0;
}
 
void printArray(int **array, int size) {
  for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size; ++j)
      std::cout << array[i][j] << " ";
    std::cout << std::endl;
  }
}
 
int countValueForRow(int **array, int size, int row, int value) {
  int result = 0;
  for (int i = 0; i < size; ++i)
    if (row != i && array[row][i] == value)
      ++result;
  return result;
}
 
int countWinners(int **array, int size) {
  int result = 0;
  for (int i = 0; i < size; ++i) {
    int numberOfWins = countValueForRow(array, size, i, WIN);
    int numberOfLooses = countValueForRow(array, size, i, LOOSE);
    if (numberOfWins > numberOfLooses)
      result++;
  }
  return result;
}
 
int firstMostWinner(int **array, int size) {
  for (int i = 0; i < size; ++i)
    if (countValueForRow(array, size, i, WIN) > (size - 1) / 2)
      return i;
  return -1;
}
 
void printNumberOfWinners(int **array, int size) {
  std::cout << "Number of winners: " << countWinners(array, size) << std::endl;
}
 
void printFlawlessWinners(int **array, int size) {
  std::cout << "Flawless winners: ";
  for (int i = 0; i < size; ++i)
    if (countValueForRow(array, size, i, LOOSE) == 0)
      std::cout << i << " ";
  std::cout << std::endl;
}
 
void printHasMostWinner(int **array, int size) {
  std::cout << "Have most winner: " <<
    ((firstMostWinner(array, size) > -1) ? "yes" : "no") << std::endl;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  int size = 5 + rand() % 3;
  
  int **array = new int*[size];
  for (int i = 0; i < size; ++i)
    array[i] = new int[size];
    
  fillRandom(array, size);
  printArray(array, size);
 
  printNumberOfWinners(array, size);
  printFlawlessWinners(array, size);
  printHasMostWinner(array, size);
 
  for (int i = 0; i < size; ++i)
    delete [] array[i];
  delete [] array;
}
Yandex
Объявления
02.12.2011, 16:12     Задача на указатели.Указатель на указатель.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru