По названию дня недели определить номер
#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. программа становится более структурированной
Отрицательной стороной использования подпрограмм является увеличение времени работы программы.
В общем случае функция записывается следующим образом