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

Ссылки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить количество нечетных положительных элементов с четными номерами http://www.cyberforum.ru/cpp-beginners/thread200672.html
Добрый вечер! Вот код программы.Почему то он не считает количество.Всегда выводит 1.Помогите,пожалуйста что бы считал нормально.Спасибо. #include <vcl.h> #pragma hdrstop #pragma argsused #include <iostream.h> #include <math.h> #include <stdlib.h> const n=10; int array; int i;
C++ Нужна практика Дайте пожалуста 3 задачи по С++, а точнее по "Перезагрузка операций". Учюсь вот по этой книжке "Обьектно-Ориентированное Программирование в С++", Автор: Р.Лафоре. В конце каждой главы есть упражнения, но проблема в том что упражнения в этой(Перезагрузка операций) главе, строятся на упражнениях из предыдуших глав, а из-за недавней переустановки системы, все мои наработки слетели к чёртовой... http://www.cyberforum.ru/cpp-beginners/thread200664.html
endl необъявленный идентификатор C++
Почему компилятор использует endl, как переменную, а не переход на новую строку? endl необъявленный идентификатор
C++ Отредактировать
#include <iostream> using namespace std; int a; int n; const bool abba(const int x, const int y, const int beatls) { if(y > 0 && a < a)
C++ блок-схема http://www.cyberforum.ru/cpp-beginners/thread200624.html
#include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { int i,j,k,m,n,temp; int** Array; /*создаем матрицу с помощью указателей */ printf("Enter number of strings:\n "); /*пользователь задает кол-во строк и столбцов */ scanf("%d", &n); printf("Enter number of columns:\n ");
C++ Необходимо изменить строку так, чтобы длина строки стала равна заданной длине Дана строка текста, в котором нет начальных и конечных пробелов. Необходимо изменить её так, чтобы длина строки стала равна заданной длине (проверить: текущая длина должна быть меньше заданной!). Изменение следует сделать путем вставки между словами дополнительных пробелов. Количество пробелов между отдельными словами должно отличаться не более чем на 1. p.s. подскажите как делать? подробнее

Показать сообщение отдельно
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
30.11.2010, 16:43
Цитата Сообщение от 4ance Посмотреть сообщение
Правильно ли это?
Нет, неправильно.
Вы немного не понимаете суть массивов в Си. Как такового объекта "массив" в языке не существует. Есть область памяти, в которую последовательно записаны данные одного типа.

То есть массив вида int array[5] - это участок памяти размером 5 * sizeof(int). Это просто область памяти и ничего больше. Следовательно абсолютно неважно каким типом данных ее представлять. То есть я могу создать массив из 5 объектов типа int, а считать из него 20 объектов типа char (при условии что sizeof(int) == 4) && sizeof(char) == 1);

Ну а так как объекта массив не существует, то и сравнивать их нельзя. То есть нельзя писать:
C
1
2
3
4
5
int a[5];
int b[5];
// ...
if(a == b)
//...
Для работы с массивами в языке существуют указатели. Когда массив передается в функцию, то фактически в функцию передается указатель на массив, а если быть еще более точным то указатель на первый элемент массива.
При выделении области памяти динамически (new, malloc, realloc) указателю также присваивается адрес первого элемента массива.

Теперь обогатившись некоторыми знаниями посмотрим на конкретный код, то есть Ваш и то что Вы хотели бы с ним сделать.

C++
1
2
3
int **m=new int*[h]; 
for (int i=0;i<h;i++)
 m[i]=new int[h];
Здесь int **m - это двойной указатель (или указатель на указатель), с помощью операции new int*[h] этому указателю присваивается адрес первого элемента из массива указателей.
далее в цикле, каждому элементу из массива указателей присваивается адрес первой переменной из массива типа int.

Тогда получается, что выражение *m[ i ] == *m[ i + 1 ] будет аналогично выражению m[i][0] == m[i + 1][0]. То есть сравниваться будут только первые элементы i-ой и следующей строки.

Вывод: Сравнивать строки и столбцы надо поэлементно в цикле.
C++
1
2
3
4
5
6
7
bool eq = true;
for(int j = 0; j < h; ++j) {
     if(m[i][j] != m[i+1][j]) {
           eq = false;
           break;
     }
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru