Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование.docx
Скачиваний:
7
Добавлен:
27.09.2019
Размер:
41.35 Кб
Скачать

7)Вывод значения шестнадцатеричной цифры по ее символу

s

‘0’

‘1’

‘2’

‘3’

‘4’

‘5’

‘6’

‘7’

‘8’

‘9’

‘A’

‘B’

‘C’

‘D’

‘E’

‘F’

48

49

50

51

52

53

54

55

56

57

65

66

67

68

69

70

z

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include<iostream>

#include <iomanip>

using namespace std;

int z (char s)

{if(s>='0' &&s<='9') return s-'0';

else if (s>='A' && s<='F') return s-'A'+10;}

int main()

{ char c;

do { cout<<"c:";cin>>c;

cout<<setw(4)<<z(c)<<endl;

}while (c!='z');

cout<<endl;

return 0;}

8) Вывод значения десятичной цифры по ее символу

#include<iostream>

#include <iomanip>

using namespace std;

int z (char s)

{if(s>='0' &&s<='9') return s-'0';

}

int main()

{ char c;

do { cout<<"c:";cin>>c;

cout<<setw(4)<<z(c)<<endl;

}while (c!='z');

cout<<endl;

return 0;}

9)Преобразование строчной латинской буквы а прописную

#include<iostream>

#include <iomanip>

using namespace std;

int z (char s)

{if(s>='a' &&s<='z') return s=s-'a'+'A';}

int main()

{ char c;

do { cout<<"c:";cin>>c;

char s=z(c);

cout<<setw(4)<<s<<endl;

}while (c!='z');

cout<<endl;

return 0;}

10) Удаление лишних пробелов в строке.

Void nospace(char *c1, char *c2)

{

intj = 0; //индекс в выходном массиве

for(inti=0; c1[i]!=0; i++)

{

if(c1[i]!=’ ’)//текущий символ не пробел

{

if(i!=0 &&c1[i-1] == ‘ ’ &&j!=0)

{//не конец строки, предыдущий символ пробел, не первый символ в строке

c2[j+1] = ‘ ‘;//запись пробела

}

c2[j+1] = c1[i];//запись символа

}

}

c2[j]=’\0’;

}

11) Поиск слова максимальной длины.

Inp.seekg(0, ios::end);

intlen = inp.tellg(); //методtellg() определяетдлинуфайла

cout<< “len = ” <<len<<endl;

char *buf = new char [len+1];

inp.seekg(0, ios::beg);

strcpy(buf, “”); //очисткамассивасимволов

constintln = 81; //длина строки в тексте

charline[ln]; //массив символов для строки

while(inp.getline(line, ln)) //считывание строк пока не достигнет конец файла

strcat(buf, line);//последняя запись строк в массив символов

cout<< “buf = ” <<endl<<buf<<endl<<endl;

inti=0; //текущая позиция символа в тексте

intn=0; //длина слова

intimax = 0; //индекс начала слова

intLmax = -1; //длина максимального слова

for(i=0; buf[i]!=0; i++) //цикл для анализа каждого символа

{

if(buf[i]!=’ ’) n++; //если пробел, то слово заканчивается

else

{

if (n>Lmax)

{//если слово больше максимального

Lmax = n; //фиксация длины слова

Imax = i-n; // фиксация начала слова

}

n=0; //сброс счетчика длины слова

}}

//если последнее слово больше максимального

if(n>Lmax)

{

Lmax = n;

Imax = i-n;

}

For(I = imax; i<=imax+Lmax; i++) //цикл по символам максимального слова

Cout<<buf[i];

12) Сортировка слов в строке.

Voidsort(char *buf, char *bufs)

{//сортировка слов в строке в порядке убывания

Inti=0; //текущий индекс в выходной файл

Intk; //индекс начала максимального слова

IntLmax; //длина максимального слова

While ((k=find(buf))!=-1) //определение индекса очередного слова

{

For( ; buf[k] =!=’ ’ &&buf[k]!=0; i++, k++) //цикл по символам слова

{

Bufs[i] = buf[k]; //запись символа в выходной массив

Buf[k] = ‘ ‘; //запись пробела вместо символа во входном массиве

}

Bufs[i++]=’ ’; //добавление пробела после слова

}

Bufs[i]=0; //задание нуль-символа в конце строки

}

13) Преобразование строки в число.

Пример: ‘1234’ -> 1234

Алгоритм: исходная 0

  1. 0*10+1=1

  2. 1*10+2=12

  3. 12*10+3=123

  4.  123*10+4=1234

IntStrToInt(char *c)

{

Inti; //индекс текущего символа

Int n; //выходное число

For(i=0; !(c[i]>=’0’ && c[i]<=’9’); i++) //поискпервойцифры

If(c[i] == ‘\0’) return 0;//если конец строки, то выход из цикла

For(n =0; c[i]>=’0’ &&c[i]<=’9’; i++)

n = n*10 + c[i] – ‘0’;

return n;

}

14) Преобразование числа в строку.

Пример: 1234-> ‘1234’

Исходноечисло: 1234

1234%10=4

123%10=3

12%10=2

1%10=1

Void IntToStr(char *c, int n)

{

Intk; //количество цифр в числе

Intj; //индекс текущего символа

For(j=n, k=0; j!=0; k++, j/=10);

c[k]=’\0’;

for(k--; k==0; k--, n/=10)

c[k] = n % 10 + ’0’;

}

15) Сравнениестрок.

Intmy_strcmp(unsigned char *s1, unsigned char *s2)

{

Inti;

For(i=0; s1[i]!=’\0’ && s2[i]!=’\0’; i++) // циклдоконцастроки

If(s1[i]!=s2[i]) break; //еслиi-тые символы не совпадают, то выход их цикла

If(s1[i] == s2[i]) return –0; // еслиi-тые символы совпадают, то строки одинаковые

If(s1[i]<s2[i]) return -1; //если символ 1ой строки меньше, то первая строка меньше

Return 1;

}

16) Сравнение строк с заданными весами символов.

Intmy_strcmp(char *s1, char *s2)

{

Inti;

Int c1;

Int c2;

For(i=0; c1[i]!=’\0’ &&s2[i]!=’\0’; i++) //цикл пока не будет достигнут конец строки

{

c1=weight(s1[i]);

c2=weight(s2[i]);

if(c1!=c2) break; //если весы не равны то выход из цикла

}

If(c1==c2) return 0;

If(c1<c2) return -1;

Return 1;

}

17) Выделение вложенных объектов.

Intfind(char *c)

{

Int k=0;

Int max;

Int b;

For(i=0, max=0, b=-1; c[i]!=0; i++) //циклпосимволам

{

If(c[i] == ‘}’) k--;

If(c[i] == ‘{’)

{

k++;

if(k>max) //если глубина вложений больше

{

Max = k;

b=i;

}

}

}

If(k!=0) return 0; return b;

}

18) Сортировка слов в строке см. 12

19) Преобразование строки в число см. 13

20) Структуры (struct). Назначение. Общий вид. Пример.

Структура – это структурированный тип данных(то есть имеющий сложную структуру)

Структуры используются при разработке информационных систем, баз данных.

Общий вид:

Struct имяТипа

{определение элементов полей;};

Пример:

Struct student

{Char fam[30]; //фамилия

Int kurs; //курс

Char grup[10]; //группа

Float stip; // стипендия

};

После этого student становится именем типа данных, который может быть назначен некоторым переменным:

Student stud1, stud2, *pst;

Здесь stud1 и stud2 – переменные типа student, a *pst – указатель на структуру типа student.

Чтобы получить доступ к полю, нужно воспользоваться операцией доступа:

ИмяСтруктуры. ИмяЭлемента

Stud1.fam stud1.stip

21) Структуры часто образуют массивы. Чтобы объявить массив структур,

вначале необходимо определить структуру (то есть определить агрегатный тип данных),

а затем объявить переменную массива этого же типа

На основании результата необходимо провести сортировку.

1. должны упорядочить поле по которому ищем,

2. провести поиск делением пополам и найти данные или вывести сообщение, что таковых не найдено

3. если данные найдены, то надо узнать где они лежат в исходной структуре (номер элемента массива (структуры))

22) Алгоритм

  1. За основу возьмем программу поиска массива структур. Изменим ее так, что бы она вместо поиска упорядочивала массив, а затем записывала его в новый файл.

  2. Для сортировки выберем метод выбора. Основная идея этого метода из массива выбирается наименьший элемент, меняется местами с первым элементом, затем рассматриваются элементы начиная со второго, наименьший из них меняется местами со вторым элементом и т д

  3. Для упорядочивания требуется количество просмотров на единицу меньше чем количество элементов в массиве

Например:

for(i=0;i<Nrecord;i++)//сортировка номеров

{

int imin=i; запоминаем индекс первого элемента

for(int j=i+1;j<N;j++)

if(base[j].marsh<base[imin].marsh)

imin=j;

Man a=base[i];

base[i]=base[imin];

base[imin]=a;

}

23.Объединения(union). Назначение. Общий вид. Пример.

Это еще один структурированный тип данных.

Общий вид объединения:

union Имя типа;

{определение элементов полей;};

Объединения используются, когда необходимо получить доступ к одним и тем же данным разными способами.

Объединения отличаются от структуры способом организации внутренней памяти. Все элементы объединения в памяти начинаются с одного байта.

Пример:

union U;

{char ch.1;

char ch.2;};