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

Помогите обьяснить что означают эти команды - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Lifehouse
0 / 0 / 0
Регистрация: 12.11.2011
Сообщений: 58
14.11.2011, 19:06     Помогите обьяснить что означают эти команды #1
Вот задача
Дана целочисленная матрица размера M × N. Найти номер последней из ее строк, содержащих максимальное количество одинаковых элементов.
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int countSames(int *array, int width) {
  int i;
  int *counters = (int*)malloc(width * sizeof(int));
  // можно функцией memset
  for (i = 0; i < width; ++i) counters[i] = 0;
  for (i = 0; i < width; ++i) ++counters[array[i]];
 
  int result = 0;
  for (i = 0; i < width; ++i)
    if (counters[i] > 1)
      result += counters[i];
 
  free(counters);
  return result;
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
  int height = 7 + rand() % 5;
  int width = 7 + rand() % 5;
  
  int i, j;
  int **matrix = (int **)malloc(height * sizeof(int*));
  
  for (i = 0; i < height; ++i) {
    matrix[i] = (int *)malloc(width *sizeof(int));
    printf("Row %3d:", i + 1);
    for (j = 0; j < width; ++j)
      printf("%3d", matrix[i][j] = rand() % width);
    int same = countSames(matrix[i], width);
    printf(" | %3d same", same);
    printf("\n");
  }
 
  int maxSameRowId = 0;
  int maxSameRowValue = countSames(matrix[maxSameRowId], width);
  for (i = 1; i < height; ++i) {
    int same = countSames(matrix[i], width);
    if (same >= maxSameRowValue) {
      maxSameRowId = i;
      maxSameRowValue = same;
    }
  }
 
  printf("\nMaximum same numbers %d are in row number %d\n",
    maxSameRowValue, maxSameRowId + 1);
 
  for (i = 0; i < height; ++i)
    free(matrix[i]);
  free(matrix);
 
  return 0;
}
что эта звездочка, малок, сайзоф,коунтерс означают
C++
1
int *counters = (int*)malloc(width * sizeof(int));
еще это
C++
1
2
for (i = 0; i < width; ++i) counters[i] = 0;
  for (i = 0; i < width; ++i) ++counters[array[i]];
это
C++
1
int main(int argc, char *argv[])
...
C++
1
srand(time(0));
что эти 2 звездочки означают или к чему ведут...
C++
1
int **matrix = (int **)malloc(height * sizeof(int*));
заранее большое спасибо....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2011, 19:06     Помогите обьяснить что означают эти команды
Посмотрите здесь:

C++ что означают эти 0x378 или 888 в языке C++?
Помогите, что описывает эти программы??? C++
Объясните,что означают эти строки. C++
C++ Что означают эти объявления переменных?
C++ Объясните что делают эти команды
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
14.11.2011, 19:29     Помогите обьяснить что означают эти команды #2
Цитата Сообщение от Lifehouse Посмотреть сообщение
что эта звездочка, малок, сайзоф,коунтерс означают
C++
1
int *counters = (int*)malloc(width * sizeof(int));
еще это
C++
1
2
for (i = 0; i < width; ++i) counters[i] = 0;
  for (i = 0; i < width; ++i) ++counters[array[i]];
это
C++
1
int main(int argc, char *argv[])
...
C++
1
srand(time(0));
что эти 2 звездочки означают или к чему ведут...
C++
1
int **matrix = (int **)malloc(height * sizeof(int*));
заранее большое спасибо....
Первая звездочка означает, что переменная counters является указателем на тип int.
Вторая звездочка преобразует значение, возвращаемое функцией malloc, которое имеет тип void *, то есть тип указателя на void в тип указателя на int.
Третья звездочка внутри malloc означает оператор произведения операндов.

Во втором вашем примере я не вижу звездочек. Там есть два знака ++. Они означают увеличение значения переменной на единицу. Если переменная имеет тип указателя, то это означает увеличение значения указателя на размер объекта, на который он указывает. То есть есмли есть указатель int *p, который равен, допустим 0, и есть операция ++p, то значение p станет равным 4, так как это размер объекта типа int на 32-битовых платформах.

В функции main звездочка означает указатель, то есть запись char *argv[] означает массив неизветсной длины из указателей на тип char.

srand(time(0)); это инициализация генератора случайных чисел значением, взятым на основании текущего времени.

int **matrix - это объявление указателя на указатель на тип int
Lifehouse
0 / 0 / 0
Регистрация: 12.11.2011
Сообщений: 58
14.11.2011, 19:31  [ТС]     Помогите обьяснить что означают эти команды #3
spasibo a vot eto argv shto oznachaet ?
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
14.11.2011, 19:34     Помогите обьяснить что означают эти команды #4
Цитата Сообщение от Lifehouse Посмотреть сообщение
spasibo a vot eto argv shto oznachaet ?
Массив параметров, которые передаются программе перед запуском.
Dar101
 Аватар для Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
14.11.2011, 19:35     Помогите обьяснить что означают эти команды #5
Аргументы, передавамые в командной строке при запуске.
Например запускаете: "programm.exe 15 aaa"
Тогда в программе можно использовать:
argv[1]=15;
argv[2]=aaa;
Lifehouse
0 / 0 / 0
Регистрация: 12.11.2011
Сообщений: 58
14.11.2011, 19:36  [ТС]     Помогите обьяснить что означают эти команды #6
ooo teper yasno spasibo bol'shoe
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.11.2011, 19:46     Помогите обьяснить что означают эти команды #7
Цитата Сообщение от Lifehouse Посмотреть сообщение
что эта звездочка, малок, сайзоф,коунтерс означают
Каунтэс (а не коунтерз) - это указатель, видимо на счёткчи, по нему выделяется память, то есть он будет указывать на выделенную память, sizeof измеряет размер в байтах любого типа, или переменной, маллок реально выделяет память, звёздочка говорит о том, что это указатель, а не прямые данные, тип в скобках - оператор приведения типа, тип со звёздочкой - тип указателя на данные того типа, при ком звёздочка, звёздочка при каунтэсе относится к типу этого каунтэса.

Добавлено через 2 минуты
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вторая звездочка преобразует значение, возвращаемое функцией malloc,
Бред. Звёздочка имеет тот же смысл, как и первая и ничего не преобразует. Преобразует оператор приведения типа, весь целиком.

Добавлено через 2 минуты
Цитата Сообщение от Lifehouse Посмотреть сообщение
spasibo a vot eto argv shto oznachaet ?
Думаешь, кто то знает, что такое "спэйсайбоу эй воут эгв чтоу ознэчэйэт"?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2011, 20:04     Помогите обьяснить что означают эти команды
Еще ссылки по теме:

Что означают эти конструкции? C++
C++ Что означают эти значения красным цветом?

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

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
14.11.2011, 20:04     Помогите обьяснить что означают эти команды #8
Цитата Сообщение от taras atavin Посмотреть сообщение

Добавлено через 2 минуты
Бред. Звёздочка имеет тот же смысл, как и первая и ничего не преобразует. Преобразует оператор приведения типа, весь целиком.
У меня написано

Вторая звездочка преобразует значение, возвращаемое функцией malloc, которое имеет тип void *, то есть тип указателя на void в тип указателя на int.
Так как вопрос был про звездочки, то я и описал смысл использования звездочек. Если вы не поняли, то это ваши проблемы. У меня как раз и изложен смысл, что один указатель преобразуется к другому указателю.

Не надо демонстрировать, что вы такой "умный". Я отвечал на вопрос в том духе, в котором тот был задан.
Yandex
Объявления
14.11.2011, 20:04     Помогите обьяснить что означают эти команды
Ответ Создать тему
Опции темы

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