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

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

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

C++ Функция принимает указатель на void и возвращает указатель на int
Указатели на указатель 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
 Аватар для lemegeton
2910 / 1339 / 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     Задача на указатели.Указатель на указатель.
Ответ Создать тему
Опции темы

Текущее время: 16:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru