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

Прокомментировать код - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычисление объема цилиндра http://www.cyberforum.ru/cpp-beginners/thread593029.html
// x.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" // Вычисление объема цилиндра #include <stdio.h> #include <conio.h> #include <locale.h> #define PI 3,1415926 fioat v(float r, float h)
C++ Функция для обработки строк Написать функцию, возвращающую самое длинное слово в строке. http://www.cyberforum.ru/cpp-beginners/thread593028.html
Вычисление следа матрицы и определителя C++
воббщем надо реализовать вычисление следа матрицы и определителя алгоритм для следа : #include <stdio.h> typedef int *pInt; main() { int N,M; pInt *a; int summa=0,i,j;
Массив структур C++
Помогите пожалуйста: Описать структуру с именем NOTE, содержащую следующие поля: фамилия, имя, номер телефона, дата рождения (массив из трёх чисел). Написать программу, выполняющую следующие действия: Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE, вывод на экран информации о человеке, чьи дни рождения приходятся на месяц, значение которого введено с клавиатуры....
C++ Интерполяция в каноническом виде. Возможна ошибка в системе Гаусса http://www.cyberforum.ru/cpp-beginners/thread592972.html
Возникли проблемы с интерполяцией в каноническом виде. Возможно проблема в Гауссе. Очень прошу помочь. Очень срочно надо! #include <string.h> #include <conio.h> #include <stdio.h> #include <windows.h> #include <stdlib.h> #include <iostream> #include <io.h> #include <math.h>
C++ Доступ к переменным Есть иерархия классов: class base{ int a; }; class der : private base{ void f(){ //Необходимо использовать переменную base::a //Но постоянно писать base:: утомляет и код становится нечитабельным //Как можно это обойти? } подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.06.2012, 12:46     Прокомментировать код
Цитата Сообщение от asidorchenko Посмотреть сообщение
Указатель любого типа является 4 байтовым.
Только на 32-х битных системах, в 64-х битных указатель занимают 64 бита, а int также 32.

Добавлено через 5 минут
Цитата Сообщение от asidorchenko Посмотреть сообщение
n=nn; // присвоения значения количества элементов
S=new int [n]
надо всегда проверять успешность выделения, а размер должен быть unsigned:
C++
1
2
3
4
5
6
7
8
9
10
11
12
massiv::massiv (unsigned int n)
{
 s=new [n];// Здесь n - параметр, он перекрывает член с именем n
 if (S!=NULL) // или if (S!=null_ptr), если компилятор понимает null_ptr
 {
   this->n=n; // this->n - член данного экземпляра, имеющий имя n. Это полная форма его адресации и она не перекрывается. просто n - параметр
 }
 else
 {
   n=0;
 }
}
Добавлено через 1 минуту
Цитата Сообщение от asidorchenko Посмотреть сообщение
int n, *S;
так как n - размер, то надо так:

C++
1
2
3
4
class massiv {public:
 int *S;
 unsigned int n;
 ...
Добавлено через 1 минуту
Цитата Сообщение от Михаил Кричук Посмотреть сообщение
int max();
int min();
индексы должны быть unsigned:
C++
1
2
unsigned int max();
unsigned int min();
Добавлено через 1 минуту
Цитата Сообщение от Михаил Кричук Посмотреть сообщение
cout<<"Введите количество элементов массива: ";
* * cin>>n;
* * for (int i=0;i<n;i++)
* * {
* * * * cout<<"\n S["<<i<<"]=";
* * * * cin>>S[i];
* * }
i - тоже индекс. Поэтому тоже unsigned int i, а не int i.

Добавлено через 48 секунд
unsigned избавляет от проверки факта не отрицательности размера и выяснения того, как new реагирует на отрицательные числа.

Добавлено через 2 минуты
А для гигантских массивов все индексы и размеры только size_t, это тоже unsigned int, но с разрядностью, гарантированно равной разрядности адреса и указателя, что позволяет запихать туда любой возможный индекс, или размер.

Добавлено через 49 секунд
Цитата Сообщение от asidorchenko Посмотреть сообщение
for (int i = 0; i < n;i++)
и здесь i - индекс. unsigned int.

Добавлено через 4 минуты
Цитата Сообщение от asidorchenko Посмотреть сообщение
int massiv::max () // выяснение индекса максимального элемента
{ // начало max
* * int i; // объявление переменной счетчика цикла с именем i. Переменная не инициализирована. Перед использованием переменные должны быть проинициализированы.
* * int N=0; *// объявление переменной индекса массива *с именем N. Переменная инициализирована 0
* * for (i=0;i<n;i++) // цикличное изменение счетчика массива
* * * * if (S[N]<S[i]) // сравнение двух элементов массива и сохранение индекса элемента в массиве
* * * * * * N=i; // если S[N]<S[i] то *N=i;
* * return (N); // возвращение значения
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
unsigned int massiv::max()
{
 unsigned int i;
 unsigned int N=0;
 for (i=0; i<=n; --i)
 {
  if (S[N]<S[i])
  {
   N=i;
  }
 }
 return N;
}
ну и минимум
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
unsigned int massiv::min()
{
 unsigned int i;
 unsigned int N=0;
 for (i=0; i<=n; --i)
 {
  if (S[N]>S[i])
  {
   N=i;
  }
 }
 return N;
}
Добавлено через 4 минуты
Если уж охота юзать знаковые индексы, то их разрядность должна быть ещё больше, чем размера и только в самих циклах, возвращать надо всё равно unsigned int. Возможное исключение - отрицательные значения в качестве кодов ошибок, но и это не лучшее решение, и в этом случае действует то же правило о разрядности. Если размер проверяется, то разрядность индексов должна быть больше, чем количество бит, необходимых для хранения максимального размера.

Добавлено через 1 минуту
Пользователь может ввести что попало и всё, что он вводит, подлежит или проверкам на допустимость, или защитам на уровне типа.
 
Текущее время: 13:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru