КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Типы определяемые программистом
Массив Массив- именованная конечная совокупность значений, каждый из которых связанный с величиной называемой индексом. Float a[10]; нумеруется от 0 int b[5] = {0, 1, 3} инициализация. Элементы которым в списки инициализации ничего не соответствуют обнуляются. Int c[] = {5,8,14} – тогда компилятор объявит массив с 3 элементами. Если границы не указаны, то должна быть инициализация. Размерность массива может быть указана только целой положительной константой или константным выражением.
Преобразование целочисленного значения массив символов #include<iostream> int main() { const char zero = '0'; char cipher; cost short maxlen = 12; short j, k,number; char buffer[maxlen]; cin >> number; k = 0; do { buffer[k++] = number % 10 + zero; number = number / 10 } while(number > 0) k—; for(j=k; j >=0; j—_ count << buffer[j]; return 0; }
Сортировка целочисленного массива методом выбора. #include<iostream> using namespace std; int main() { const int n = 20; int b[n], i; for(i = 0; i < n; i++) { cin >> b[i]; } for(i = 0; i < n-1; i++) { int imin = i; for (int j = i+1; j < n; j++) { if (b[j] < b[imin]) { imin = j; } } int a = b[i]; b[i] = b[imin]; b[imin] = a; } for(i = 0; i < n; i++) { cout << b[i]<< endl; } return 0; }
Для ускорения поиска в информационных системах данные предварительно упорядочиваются по некоторому признаку. Например по возрастанию числовых значений или по алфавиту. Ускорение поиска достигается за счет последовательного уменьшения области поиска примерно в 2 раза. Т.к. На k шаге область поиска уменьшается примерно в 2 ^ k раз, то местоположение искомого значения в совокупности из n элементов. Можно найти за число шагов не превышающего log n(по основанию 2).
Этот алгоритм называется дихотомия. Последовательное уменьшение поиска.
#include<iostream> using namespace std; int main() { const short n=5; short left, right, center;
int x, A[n]; bool found = false; cin >> x; for(left = 0; left < n; left++) cin >> A[n]; left = 0; right = n-1; do { center = (left+right)/2; if (x<A[center]) right = center - 1; else if(x > A[center]) left = center + 1; else found = true; } while (left <= right &&!found); if (found) cout << "Nomber-" << center << endl; else cout << "Not found"<< endl; return 0; }
Идентификатор массива является константным указателем на его нулевой элемент.
Рассмотрим пример. Копирование элементов одного массива в другой. #include<iostream> using namespace std; int main() { int a[100],b [100]; int *pa = a; int *pb = b; ... for (int i = 0; i < 100; i++) *pb = *pa++;// b[i] = a[i] ... return 0; }
Динамические массивы создаются с использованием операции new int n = 100; float *p = new float[n]; // создается переменная указатель (р) на поле памяти типа float и в динамической памяти отводится непрерывная область для размещении 100 элементов типа float. Адрес начала этой области предается переменной р. Динамические массивы нельзя при создании инициализировать и они не обнуляются. Доступ к элементам динамического массива осуществляется также как к статическим. p[5] <=> *(p+5)
Многомерные массивы задаются указанием каждого измерения. int matr[5][6] Массив содержащий 5 строк и 6 столбцов. В памяти элементы многомерного массива представляются последовательно. Так сто переходе к следующему элементу быстрее меняется паратый индекс. То есть в памяти элементы матрицы располагаются по строкам.
Для доступа к элементам многомерного массива указываются все его индексы. matr[i][j] *(matr[i] + j) или *(*(matr + i)+j)
Рассмотрим пример: В целочисленной матрице найти номер строки, содержащий наибольшее количество нулевых элементов. #include<iostream> using namespace std; int main() { const int nstr = 4, nstb = 5; int b[nstr][nstb]; int i, j; for (i = 0; i < nstr; i++) for(j = 0; j < nstb; j++) cin >> b[i][j]; int istr = -1, Maxkol = 0; for(i = 0; i < nstr; i++) { int kol = 0; for(j = 0l j < nstb; j++) if (b[i][j] == 0) kol++; if(kol > Maxkol) { istr = i; Maxkol = kol; } } cout << "Mass" << endl;
for (i = 0; i < nstr; i++) for(j = 0; j < nstb; j++) cout << b[i][j]<<' '; cout << '\n'; if (istr == -1) cout<<"Zero no"; else cout<<"Nomber str"<<istr; return 0; }
Для создания динамического многомерного массива в операторе new необходимо указать все его размерности.
int **m = (int**) new int [nstr][10];
Память под двумерный массив можно также выделить программно: int nstr, nstb; cout << "ВВедите число строк и столбцов"; cin >> nstr >> nstb; int **a = new int *[nstr]; for(int i = 0; i < nstr; i++) a[i] = new int [nsrb];
//Дана целочисленная матрица. определить номер строки содержащий наибольшее колличество элементтов #include<iostream> #include<cmath> using namespace std;
int main() { const int kol_str = 4, kol_stolb = 5; int b[kol_str][kol_stolb]; int i, j; for (i = 0; i < kol_str; i++) for (j = 0; j < kol_stolb; j++) cin b[i][j]; int istr = -1, max_kol = 0; for (i = 0; i <kol_str; i++) { int kol = 0; for(j = 0; j < kol_stolb; j++) if(b[i][j] == 0) kol++; if(kol } return 0; }
каждому элементу массива указалетей на строки a[i] присваевается вдрес поля памяти, веделенного под строку двумерного массива int **a = new int *[nstr]; for (int I = 0; i< nstr; i++) a[i]=new int[nstb]
освобождение памяти выделенное под динамический массив осуществляется операцией delete[]
замечание: *p[10] — массив из десяти указателей, а не указательный массив.
Строки — это массивы символов, заканчивающиеся нуль символом. Нуль символ — это символ код которого равен 0 '\0' по положению 0 символа определяется фактическая длинна строки. //gпример #include<iostream> #include<cmath> using namespace std;
int main() { char str[10] = "Primer"; /*str[0] - 'p' str[1] - 'r' str[5] - 'r' str[6] - '\0' */ char str[] = "primer" return 0; }
Языком с++ не предусмотрены операции присваивание одной строки другой, сравнение. Эти операции приходиться программировать в ручную. Возможности копирование, сравнения, объединения строк, поиска подстроки, определения длинны строки заложены в библиотеке функции с++.
strstr(a,b) = true or false – сравнение strlen(a) – длина #inclede <string>
//gпример программа для запроса пароля не более 3 раз #include<iostream> #include <string>
using namespace std;
int main() { char s[80], passw[]="kuku"; int i, k =0; for(i = 0;!k && i<3; i++) { cout << "enter password"; gets(s);//функция ввода строки if (strstr(s,passw)) k =1; } if (k) cout <<"enter ok"; else cout << "no pasw"; return 0; }
копирование строки в строку можно запрограммировать циклом.
Szc → dest char szc[10], dest[10]; for(int I = 0; i<=strlen(szc);i++) dest[i] = szc[i]
т. к. функция strlen вычисляет длинну, то более эффективным будет использованием проверки на нуль символ, непосредственно в цикле
Дата добавления: 2014-01-11; Просмотров: 491; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |