По названию дня недели определить номер

#include <iostream.h>

main()

{

int n;

cout<<"Input n:";

cin>>n;

switch (n)

{

case 0:cout<<"Sunday"<<endl; break;

case 1:cout<<"Monday"<<endl; break;

case 2:cout<<"Tuesday"<<endl; break;

case 3:cout<<"Wednesday"<<endl; break;

case 4:cout<<"Thursday"<<endl; break;

case 5:cout<<"Friday"<<endl; break;

case 6:cout<<"Saturday"<<endl; break;

default: cout<<"Mistake";

}

}

31 вопрос * Оператор цикла For

Любой цикл можно написать с помощью if и goto , несмотря на это в языках программирования в том числе в C++ имеются специальные операторы цикла, которые делают текст программы более компактным и понятным..

В C++ имеется 3 оператора цикла

For, while и do while

a. for (x=начальное значение; условие; модификация)

{

Iвыражение;

}

Здесь x называется параметром цикла, может быть любого скалярного типа. Цикл работает по следующей схеме.

Вначале параметр получает начальное значение, далее вычисляется выражение, после чего изменяется значение параметра (модификация) и проверяется условие продолжения цикла. Если условие истинно то цикл продолжается , в противном случае цикл прекращает свою работу.

Пример

#include <stdio.h>

main () // вычисление суммы 1-5

{

int S, Khanlar;

S=0;

for ( Khanlar=1;Khanlar<=5;Khanlar++)

S+=Khanlar;

printf(“%5d \n”,S);

}

32 вопрос * Оператор цикла while

while (условие)

{

выражение

}

Здесь начальное значение параметра цикла присваивается до начала цикла, а модификация осуществляется внутри цикла ( это должен организовать сам программист). При вхождении в цикл выполняется проверка , в случае если условие истинно то цикл продолжается в противном случае прекращается. Этот цикл называется циклом с предусловием.

.

#include <stdio.h>

main () // сумма 1 -5

{int isum,x;

isum=0;

x=0;

while (x<=5)

{

isum+=x;

x++;

}

printf(“%5d \n”,isum);

}

33 вопрос * Оператор цикла do while

do

{

выражение

}

While (условие)

Do while Полностью аналогичен while (условие) но здесь проверка продолжения выполняется в конце цикла, такой цикл называется циклом с постусловием. Такой цикл всегда выполняется xотя бы один раз.

Пример

#include <stdio.h>

main ()

{

// сумма 1 -5

int isum=0:

x=0;

do

{

isum+=x;

x++;

}

while(x<=5);

printf(“%5d \n”,isum);

}

Внутри циклов могут использовать специальные операторы break и continue

Оператор break вместе с IF используется для преждевременного прекращения работы цикла.

Оператор continue напротив обеспечивает переход к следующей итерации.

Пример 2. Вычислить функцию на отрезке

#include <stdio.h>

#include <math.h>

main ()

{

float a,b,h,x,y;

scanf("%f%f%f",&a,&b,&h);

x=a;

while (x<=b)

{

y=pow(x,2);

printf("%8.2f %8.2f \n",x,y);

x+=h;

}

}

34 вопрос ** Массивы . Общие сведения

Массив относится к сложным типам данных и наиболее часто используемому типу. Массив –это обьедененные под одним именем множество однотипных данных, где обращение к отдельным элементам осуществляется с помощью индексов.

По числу индексов массивы бывают одномерные (вектора), двумерные ( матрицы) и большей размерности. Массивы как и другие переменные должны быть обьявлены.

Обьявление массивов:

tip имя [ max1];

tip имя [max1] [max2];

ПРИМЕР

int x [20];

float g[10] [20];

Здесь обьявлены одномерный массив х типа int состоящий из 20 элементов и двумерный массив g целого типа состоящий из 10 строк и 20

При обьявлении массивы можно инициалировать , т.е. задать начальные значения.

int a[5]={3,6,12,34,-78};

В языке C ++ индексирование начинается с 0 , т.е. первый элемент имеет индекс не 1 а 0, последний не 20 а 19. !!!!!!

Для обращения к отдельным элементам используются индексы

Например x[5]=89;

6-ому элементу массива X присваивается значение 89 !!!!

i=7;

j=8;

f[i][j]=0; f[7][8]=0;

Элементу матрицы f находящемся на пересечении 8 строки и 9 столбца присваивается 0

Над индексами м ожно выполнять операции

x[2*i-1]=66;

В памяти матрицы располагаются по строкам..

35 вопрос *** Ввод , вывод и обработка массивов

Обычно ввод/вывод осуществляется с помощью оператора for

a) Ввод одномерного массива

float a[10];

int b[3][4];

int i,j ;

for (i=0;i<10 ; i++) scanf(“%f”, &a[i]);

b) Построчный ввод матрицы

for (i=0;i<3;i++)

for (j=0;j<4;j++)

scanf (“%f”, &b[i][j]);

c) Вывод одномерного массива

d) for (i=0;i<10;i++) printf(“%8.2 f ”, a[i]);

b. Построчный вывод матрицы

for (i=0;i<3;i++)

{

for (j=0;j<4;j++) scanf (“%10d”, b[i][j]);

printf(“\n”);

}

Пример 1. Найти скалярное произведение двух векторов

#include <iostream.h>

void main (void)

{

int a[3]={2,7,12},s,i;

int b[3];

s=0;

for(i=0;i<3;i++)

{

cin>>b[i];

}

for(i=0;i<3;i++) s=s+a[i]*b[i];

cout<<s;

}

Примеры

Пример 1

#include <stdio.h>

#include <math.h>

void main ()

{

int y=0,a[5]={2,4,3,7,1};

int k;

for (k=0;k<5;k++)

y=y+a[k];

printf(“%d”, y);

}

Пример 2

#include <stdio.h>

#include <math.h>

void main ()

{

int y=0,a[5]={10,-5,3,12,-8};

int k;

for (k=0;k<5;k++)

if( a[k]%2==0) y+=a[k]+2;

printf(“%d”, y);

}

Пример 3

#include <stdio.h>

#include <math.h>

void main ()

{

int y=0, a[ 3 ][ 3 ]={10,0,3,2,-8,-1,0,2,3};

int i,j;

for (i=0;i< 3;i++)

for(j=0;j<3;j++)

y+=a [ i ] [ j ];

printf("%d", y);

}

Пример 4

#include <stdio.h>

#include <math.h>

void main ()

{

int y=20, a[ 3 ][ 3 ]={10,0,3,2,-8,-1,0,2,3};

int i,j;;

for (i=0;i< 3;i++)

for(j=0;j<3;j++)

if (a[ i ] [j ] !=0) y+=a [ i ] [ j ];

printf("%d", y);

}

Пример

#include <stdio.h>

#include <math.h>

void main ()

{

int n=0,a[5]={10,-5,3,12,-8};

int k;

for (k=0;k<5;k++)

if( a[k]<0) n+=1;

printf("%d", n);

}

36 вопрос *** Указатели

Указатели это особой тип данных.Они служат для хранения не чисел или текста a для хранения адресов переменных где хранятся данные. C помощью указателей можно решить ряд проблeм программирования, в частности с помощью них можно организовывать связные структуры такие как стек, очередь, деревья и другие.

Указатели как и другие типы данных должны быть обьявлены.

Пример

int *a;

float *x;

Здесь аэто не целая переменная а переменная для хранения адреса какой либо целочисленной переменной. !!!!!!

При работе с указателями в основном используются две основные операции

&- получить адрес *- получить значение переменной посредством указателя

& -можно применять как к отдельным переменным так и к элементам массивов.

Операцию получения адреса & нельзя применять к константам и математическим выражениям.

Например &15 и &(a*x+b) недопуситимыми !!!!»!»!.

Пример

#include <stdio.h>

main ()

{

int a,x;

int *pt; // это указатель !!!

a=5;

pt=&a;

x=*pt;

printf(“%d %d”,a,x);

}

Эта програма фактически реализует простое присвоение x=a;

Указатели можно использовать как альтернативный индексам метод обращения к элементам массивов.

Для этого указателю необходимо присвоить адрес первого элемента массива , для обращения к последующим элементам можно использовать инкрементирование указателя

Пример1

#include <stdio.h>

#include <math.h>

main ()

{

int a[3][3]={8,4,2,1,10,4,2,5,2},c;

int *pt,*pt1;

int i;

pt=&a[0][0];

pt1=&a[2][2];

c=0;

c=*pt+*pt1;

printf("%d",c);

}

Пример2

#include <math.h>

#include <stdio.h>

main ()

{

int a[4]={8,4,2,1},b[4]={2,7,6,8},c,*pt,*pt1;

int i;

pt=&a[3];

pt1=&b[3];

c=*(pt-2)+*(pt1-2);

printf("%d",c, pt-2);

}

Пример3

#include <stdio.h>

#include <math.h>

main ()

{

int a[4]={8,4,2,1},b[3]={2,7,6},c,*pt,*pt1;

int i;

pt=&a[0];

c=0;

for (i=0;i<4;i++)

c=c+*(pt+i);

pt1=&b[2];

c=c+*pt1;

printf("%d",c);

}

Указатели можно распечатывать как целую переменную, но нельзя вводить !!!

37 вопрос ** Строки

В C++ нет специального типа для хранения строк и для этого используются массивы типа char . При этом последним символом должен быть ‘\0’ !!!!!.

char s[20]; // строка из 20 символов;

Строки можно обьявлять и без указания длины массива .

char d [ ] ; // строка без указания длины

Строкам можно придавать значения 3 путями:

1) инициализация// во время обьявления

2) присвоение// во время исполнения

3) при вводе // при этом использование символа & не обязательно !!!

В 1 и 3 методе символ ’\0’добавляется автоматически, во втором случае об этлм должен позаботится сам программист. Символ ’\0’ записывается в одиночных кавычках !!!!!!

Пример

#include <stdio.h>

main ()

{

char a[20]= “Narmin”;

char b[]=“Nigar”;

char x1[4], x2[8], static char x3[6]=”salam” ;

x1[0]=’g’; x1[1]=’r’; x1[2]=’u’; x1[3]=’p’; x1[4]=’\0’;

char m[3][25]={“Пример”,”Джафар”,”606”};

printf (“\n\n\t vvediten slovo komputer”);

scanf (“%s”,x2) // & не обязательно

}

Можно работать со массивами строк обьявляя его как 2 мерный массив

При вводе в составе строк не должно быть пробела !!!!!!!

Присваивать строки не разрешается

A=”Aytan” // Нельзя !!!!!!

Это надо делать по элементно !!!!

char d[6] // один символ дополнительно !!!!

d[0]=’A’;

d[1]=’y’;

d[2]=’t’;

d[3]=’a’;

d[4]=’n’;

d[5]=’\0’;

Строки можно выводить с помощью printf и формата s

Строки можно вводить с помощью специальной функции gets(a) а выводить с помощью puts(a) здесь a имя строки

Строки обрабатываются как символьные массивы с помошью циклов. При использовании оператора for необходимо предварительно найти реальную длину строки. Для этого используется функция strlen(), которая как и другие строковые функции расположены в библиотеке string.h

Эта библиотека должна быть подключена с помощью include

38 вопрос . *** Функции для работы со строками

strlen (a) - определяет длину строки. Заменяет sizeof ().

strcpy(a1,a2) -копирует a2 в a1

strncpy(a1,a2,n) -копирует n символов из a2 в a1

strcat(a1,a2) -обьеденяет a1 и a2 (a2 после a1 )

strcmp(a1,a2) сравнивает a1 и a2 с учетом регистра, если строки одинаковы то возвращает 0, если r s1>s2 то 1, если s1<s2 то -1

stricmp(s1,s2) – аналогично strcmp но без учета регистра.

strncat(s1,s2,n) – n символов из s2 добавляет в конец s1

strstr(s1,s2) – находит подстроку s2 в составе s1 , начиная с этой позици и выделяет оставшиеся символы..

sprintf(s,........)- печать не на экран а в строку s s аналогично printf sscanf(s,......) - считывает данные не с клавиатуры а со строки

Пример Ввести строку и определить число появлений символа А

#include <stdio.h>

#include <string.h>

main ()

{

char a[20];

int i, n,s;

scanf("%s",&a); // vvod

printf("%s",a); // vivod

n=strlen(a);// dlina

s=0;

for (i=0 ;i< n;i++)

if (a[i]=='A')

s= s+1;

printf(" s=%d",s);

}

Пример 2 Определить число появлений символа A (другое решение)

#include <stdio.h>

#include <string.h>

main ()

{

char a[20]="A455AABB5saA";

int i, n,s;

i=0;

s=0;

while (a[i]!='\0')

{

if (a[i]=='A')

s= s+1;

i=i+1;

}

printf(" s=%d",s);

}

Пример 3

#include <stdio.h>

#include <string.h>

main ()

{

char a[20]="Program";

char b[20]="Pascal";

int i, n,s=0;

if (strcmp("Grup","grup")==0)

printf("s=%d",strlen(a));

else printf("s=%d",strlen(b));

}

Пример 4

#include <stdio.h>

#include <string.h>

main ()

{

char a[20]="Program";

char b[20]="Pascal";

int i, n,s=0;

if (strcmp("Ritchi","ritchi")==0)

printf("s=%d",strlen(strncat(a,b,1)));

else printf("s=%d",strlen(strncat(a,b,6)));

}

Пример 5

#include <stdio.h>

#include <string.h>

main ()

{

char a[20]="Programc++";

char b[20]="ram";

char c[20];

int i, n,s=0;

strcpy(c,strstr(a,b));

printf(“%s \n”, c);

if (strlen(c)>0)

printf("s=%d",strlen(strncat(a,b,1)));

else printf("s=%d",strlen(c));

}

39 вопрос ** Перечислительный тип

Это тип данных обьявляется с помощью ключевого слова enum и задается списком своих возможных значений.Т.е вначале должен быть определен сам тип !!!

Например

enum mesac {yanvar, fevral, mart,aprel};// тип месяц

enum predmet {matematika,fizika, ximiya};// тип предмет

enum cvet {krasniy, jeltiy, zeleniy}; // тип цвет

enum figura={treugolnik, kvadrat, pramougolnik}; // тип фигура

После формирования типа можно обьявить переменные

predmet jafar,gunel;// 2 peremeniye tipa predmet

В действительности перечислительный тип реализован как целочисленный unsighed int со значениями 0, 1,2 …, т.е. yanvar=0, fevral=1, fizika=2 .

С этим типом данных можно выполнять ограниченное число операций-присвоение из своего списка, сравнение, в составе оператора цикла

Пример jafar=ximiya;

Пример

#include <stdio.h>

main ()

{

enum cvet {jeltiy,beliy,krasniy};

cvet b1,t; int d=0;

b1=beliy;

printf("%d\n",b1);

for(t=jeltiy;t<=krasniy;t++)

d=d+t*t;

printf("%d",d);

}

Программа выдаст

Этот экзотический тип в основном используется для придания больщей наглядности.

40 вопрос *** Файлы

Для работы с файлами они должны быть обьявлены. Для этого используются указатели.

FILE *имя,*имя1;

Пример

FILE *fin, *fout;

Слово FILEдолжно быть обязательно записано в верхнем регистре !!!!!!!!

Перед чтением или записью файл дожен быть открыт с помощью специальной функции fopen в соответствующем режиме.

Коды режимов приводяться ниже :

‘r’ только чтение, еслит файл не сущ. то не открывается

‘w’ только запись, если файл суш. то он стирается

‘a’ добавление, если не сущ. то он создается

‘r+’ ввод и вывод, если не сущест. то не открывается

‘w+’ открывает пустой файл для записи и чтения, если сущ.

то он стирается

‘a+’ как режим ‘a’ но допускает чтение

Файлы открываются следующим образом

fin=fopen(“vag.txt”,”r”);// только для чтения

fin=fopen(“vag1.txt”,”w”);// для записи

Для чтения из файла используется fscanf вместо scanf а для вывода fprintf вместо printf .

fscanf(s0,s1, s2);

Здесь s0-имя файла, s1 – список форматов; s2 – список переменных с символом &на первой позиции.

fprintf(s0,s1, s2);

Здесь s0-имя файла, s1 – список форматов, s2 – список переменных.

Для возврата файла вначало используется функция REWIND (file )

Для определения конца файла используется цикл while совместно с функцией EOF (имя файла)

Для закрытия файла используется функция fclose (имя файла)

Файл vag.txt должен предварительно создан и размещен в соответствующем каталоге !!!!! !!!!!

При указании пути используется не традиционная запись С:\ vag.txt а

С:\\ vag.txt ( т.е. 2 символа слэш) !!!!!

Пример 1.

В файле leyla.txt расположены числа 2 3 6 7 -2

#include <stdio.h>

#include <math.h>

void main (void)

{

FILE *min;

int i;int x,y,z,w;

min=fopen("c:\\leyla.txt","r");

for (i=1;i<4; i++)

fscanf(min,"%d\n",&x);

fscanf(min,"%d",&y);

fscanf(min,"%d\n",&w);

z=x+y+w;

printf("%d",z);

fclose (min);

}

Пример 2

В файле vag.txt размещены числа 2 3 6 7 -2 .

#include <stdio.h>

#include <math.h>

void main (void)

{

FILE *min;

int i;int x,y,z,w;

min=fopen("d:\\leyla.txt","r");

fscanf(min,"%d\n",&x);

fscanf(min,"%d",&y);

rewind(min);

fscanf(min,"%d\n",&w);

z=x+y+w;

printf("%d",z);

fclose (min);

}

Пример 3

В файле vag.txt размещены числа 5 7 2 7 -2

#include <stdio.h>

#include <math.h>

void main (void)

{

FILE *min;

int i;int x,y,z,w;

min=fopen("c:\\leyla.txt","r");

z=0;

while (fscanf(min,"%d\n",&x)!=EOF)

if(x>0) z=z-x+2;

printf("%d",z);

fclose (min);

}

Пример 4 Копирование файла

#include <stdio.h>

#include <math.h>

void main (void)

{

FILE *min,*f2;

int x;

min=fopen("c:\\leyla.txt","r");

f2=fopen("c:\\leyla1.txt","w");

while (fscanf(min,"%d\n",&x)!=EOF)

{fprintf(f2,"%d\n",x); }

fclose (min); fclose(f2);

}

В с++ имеются дополнительные средства для работы с файлами

Классы для ввода/вывода файлов

  • ofstream: Stream класс для вывода
  • ifstream: Stream класс для ввода
  • fstream: Stream class для ввода/вывода
  • open (filename, mode); открытие файла

· myfile.close(); закрытие файла

режимы (mode)

ios::in Open for input operations.
ios::out Open for output operations.

Установленный режим

class Параметры по умолчанию
ofstream ios::out
ifstream ios::in
fstream ios::in | ios::out

Пример 5 создание файла с помощью fstream.h

// basic file operations

#include <iostream.h>

#include <fstream.h>

int main ()

{int x;

ofstream myfile;

myfile.open ("c:\\vag77.txt");

for (x=1;x<=10;x++)

{

myfile << x;

myfile<<endl;

}

myfile.close();

}

Пример 6 копирование файла с помощью fstream.h

#include <iostream.h>

#include <fstream.h>

int main ()

{int x,y;

ofstream myfile1;

ifstream myfile;

myfile.open ("c:\\vag77.txt");

myfile1.open ("c:\\vag88.txt");

for (x=1;x<=10;x++)

{

myfile >> y;

myfile1<<y;

myfile1<<endl;

}

myfile.close();

}

41 вопрос . *** Функции. Общие сведения

Часто при программировании определенной задачи встречаются одинаковые участки, но выполняемые при различных данных.

Для устранения повторяемости и упрощения программы во всех языках программирования имеются специальные средства для выделения указанных участков в отдельные подрограммы. Подпрограмы могут вызываться из основной программы и других подпрограмм и по завершении выполнения возвращают результаты в вызывающую программу. Подпрограммы могут быть двух типов : процедураи функция. В С++ используются только функции. Поэтому язык C++ часто называют языком функций.

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

Использование подпрограмм дает ряд преимуществ:

1. программы могут разрабатывать по частям

2. подпрограммы могут использоваться в других проектах

3. общий обьем программы уменьшается

4. программа становится более структурированной

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

В общем случае функция записывается следующим образом

Наши рекомендации