Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на языке С++. Учебное пособие
.pdf
71
Решение:
#include<iostream.h>
#include<conio.h>
int main()
{
unsigned int n,sum=0,br=0,chislo;
while(chislo!=0)
{
cout<<«введите число»;
cin>>chislo;
if(chislo%2==0) sum=sum+chislo;
if(chislo%2!=0) br++;
}
cout<<«сумма четных чисел=«<<sum<<endl;
cout<<«количество нечетных чисел=«<<br<<endl;
getch();
return 0;
}
Задача 2. Напишите программу, запрашивающую у пользователя N целых
чисел (2<=N<=30). Найти количество максимальных элементов.
Решение:
#include<iostream.h>
#include<conio.h>
int main()
{
int n,k=0,l=0;
double a[29],max,min;
cout<<«введите количество элементов массива»;
cin>>n;
cout<<«введите элементы массива»;
for(int i=0;i<n;i++)
cin>>a[i];
max=a[0];min=a[0];
for (int j=0;j<n;j++)
if (a[j]>max) max=a[j];
for (int j=0;j<n;j++)
if (a[j]==max) k++;
cout<<«max=«<<max<<endl;
cout<<«k=«<<k;
getch();
return 0;
}
Задача 3. Напишите программу, запрашивающую у пользователя N целых
чисел (2<=N<=30). Найти количество элементов массива сумма цифр, которых —
двухзначное число.

Решение:
#include<iostream.h>
#include<conio.h>
int main()
{
int n;
int a[29],s,k=0,chislo;
cout<<«введите количество элементов массива»;
cin>>n;
cout<<«введите элементы массива»;
for(int i=0;i<n;i++)
cin>>a[i];
for(int j=0;j<n;j++)
{
s=0;
chislo=a[j];
while(chislo)
{
s+=chislo%10;
chislo/=10;
}
if (s>9||s>-9) k++;
}
cout<<k;
getch();
return 0;
}
Задача 4. Напишите программу, запрашивающую у пользователя N целых
чисел (2<=N<=30). Найти и вывести числа, кратные каждой своей цифре.
Решение:
#include<iostream.h>
#include<conio.h>
int main()
{
int n,arr[24],br=0, chislo,flag;
cin>>n;
for (int i=0;i<n;i++)
cin>>arr[i];
for (int j=0;j<n;j++)
{
flag=1;
chislo=arr[j];
while(chislo)
{
if(arr[j]%(chislo%10)!=0)
{
flag=0;
break;
}
chislo/=10;
}
if(flag)
{
cout<<arr[j]<<« «;
}
}
if(!br) cout<<«No»<<endl;
getch();
return 0;
}
72

73
Задача 5. Дан массив из целых чисел arr[n]={20,8,32,6,1} отсортировать
массив по убыванию.
Решение:
#include<iostream.h>
#include<conio.h>
int main()
{
const int n=5;
int arr[n]={20,8,32,6,1},swap;
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i-1;j++)
if(arr[j]<arr[j+1])
{
swap=arr[j];
arr[j]=arr[j+1];
arr[j+1]=swap;
}
for(int k=0;k<n;k++)
cout<<«arr[«<<k<<«]»<<arr[k]<<endl;
getch();
return 0;
}
8.5. ФУНКЦИИ
Задача 1. Напишите программу, запрашивающую у пользователя данные:
день, месяц, год (1700,3000). Определить порядковый номер дня соответствующе-
го года.
#include<iostream.h>
#include<conio.h>
using namespace std;
bool IsLeap(int);
int main()
{
int d,m,y,nr;
bool error;
do
{
error=false;
cout<<«Input a day[1,31]:»;
cin>>d;
cout<<«Input a month[1,12]:»;
cin>>m;
cout<<«Input a year [1700,3000]:»;
cin>>y;
error=(d<1)||(d>31)||(m<1)||(m>12)||(y<1700)||(y>3000);
if (error) cout << «Incorrect input data» << endl;
else
{
switch(m)
{
case 4: case 6: case 9: case 11:
if (d>30) error=true;
break;

74
case 2:
if(!IsLeap(y)&& d>28) error=true;
}
}
} while (error);
switch(m)
{
case 1: nr=d; break;
case 2: nr=d+31;break;
case 3: nr=d+59;break;
case 4: nr=d+90;break;
case 5: nr=d+121;break;
case 6: nr=d+151;break;
case 7: nr=d+181;break;
case 8: nr=d+212;break;
case 9: nr=d+243;break;
case 10: nr=d+273;break;
case 11: nr=d+304;break;
case 12: nr=d+334;
}
if (IsLeap(y)&& m>2)
nr++;
cout << endl << d << '.' << m << '.' << y
<< endl << nr << endl;
return 0;
}
bool IsLeap(int y)
{
getch ();
return ((y%4==0)&&(y%10))||(y%400);
}
Задача 2. Вычислить значение полинома: Р
(н)
(х)=а
0
х
Н
+А
1
х
п-1
+А
2
х
н-2
+а
п-1
х +а
н
.
Решение:
using namespace std;
double ValPol(double a[], double x, int n);
void main()
{
const int N=4;
double a[N+1]={2.0,3.0,-1.0,-1.0,5.0};
double x=3.0;
cout << «P(« << x << «)=« << ValPol(a,x,N) << endl;
}
double ValPol(double a[], double x, int n)
{
double v;
v=a[0];
for (int i=1; i<=n; i++)
v=v*x+a[i];
return v;
}
Замечание:
Группа символов между пробелами считается словом.
Палиндром читается одинаково слево направо и справо налево.

75
8.6. ЗАДАЧИ ПО ТЕМЕ «ОБРАБОТКА СТРОК»
Задача 1. Дана строка символов (<=80), заканчивающая точкой. Подсчитать
количество слов в строке.
#include<iostream.h>
#include<conio.h>
#include<string.h>
int main()
{
char str[81];
cin.getline(str,81);
int br,i=0;
while(str[i]!='\0')
{
if (str[i]==' ') br++;
else cout << endl;
i++;
}
cout << (br+1) << endl;
getch();
return 0;
}
Задача 2. Найти количество однобуквенных слов.
#include<iostream.h>
#include<conio.h>
#include<string.h>
int main()
{
char str[81];
cin.getline(str,81);
int br,i=0;
if(str[1]==' '|| str[1]=='.') br++;
while(str[i]!='.')
{
if(str[i]==' ')
{
if (str[i+2]==' '||str[i+2]=='. ') br++;
}
i++;
}
cout << br << endl;
getch();
return 0;
}
Задача 3. Определить является ли данная строка палиндромом.
#include<iostream.h>
#include<conio.h>
#include<string.h>
int main()
{
char str[51];
cin.getline(str,51);
int n,i;

76
n=strlen(str);
for(i=0;i<n/2;i++)
if(str[i]!=str[n-1-i]) break;
if(i<n/2) cout << «no» << endl;
else cout << «yes» << endl;
getch();
return 0;
}
Задача 4. Даны две символьные строки. Определить сколько раз вторая
строка содержится в первой.
Решение:
#include<iostream.h>
#include<conio.h>
#include<string.h>
int main()
{
char str1[100],str2[100];
cin.getline(str1,100);
cin.getline(str2,50);
int i=0,j,br=0;
while(str1[i]!='\0')
{
j=0;
if (str1[i]==str2[0])
{
while(str2[j]!='\0')
{
if(str1[i+j]!=str2[j]) break;
j++;
}
}
if(str2[j]=='\0') br++;
i++;
}
cout << br << endl;
getch();
return 0;
}
8.7. ЗАДАЧИ ПО ТЕМЕ «СТРУКТУРЫ»
Задача 1. Описать структуру с именем Hospital, содержащую следующие
поля: фамилия (инициалы), диагноз и количество дней, проведенных в больнице.
Вывести:
1) фамилии тех пациентов, чей диагноз задан с клавиатуры;
2) фамилию пациента с наибольшим количеством дней проведенных
в больнице.

77
#include<iostream.h>
#include<conio.h>
struct Hospital
{
char name[31];
char diagnose[31];
int days;
};
int main()
{
int n;
cin >>n;
Hospital patients[50];
for(int i=0;i<n;i++)
{
cin.get();
cin.getline(patients[i].name,31);
cin >> patients[i].diagnose;
cin >> patients[i].days;
}
int ind=0,max=patients[0].days;
char FindDiagnose[31];
cin >> FindDiagnose;
for(int j=0;j<n;j++)
{
if(strcmp(patients[j].diagnose,FindDiagnose)==0)
{
cout << patients[j].name << endl;
}
if(max<patients[j].days)
{
max=patients[j].days;
ind=j;
}
}
cout << patients[ind].name << « «;
cout << patients[ind].diagnose << « «;
cout << patients[ind].days << endl;
getch();
return 0;
}
Задача 2. Описать структуру с именем Firma, содержащую следующие поля:
фамилия (инициалы), табельный номер, должность, зарплата. Вывести фамилии
тех работников, чья зарплата <700 рублей.
Решение:
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
#include<string.h>
int main()
struct Firma
{
char name[31];
char number[11];
char duty[21];
double payment;

};
int main()
{
int n;
Firma workers[21];
cin >> n;
for(int i=0;i<n;i++)
{
cin.get();
cin.getline(workers[i].name,31);
cin>>workers[i].number;
cin>>workers[i].duty;
cin>>workers[i].payment;
}
for(int j=0;j<n;j++)
{
if(workers[j].payment<700)
{
cout << workers[j].name << endl;
}
}
getch();
return 0;
}
Замечание:
Функция name_file.seekg(n); устанавливает get указатель в открытом файле.
От этой позиции значение компонента будет считано.
8.8. ФАЙЛЫ
Задача 1. Написать программу, которая вводит с клавиатуры данные: имя и
возраст пяти учеников. Данные записать в файл под названием zad_1.txt, в глав-
ную директорию С:. Для разделения данных используйте знак — ‘\n’.
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
int main()
{
char name[20];
int year;
ofstream myFile;
myFile.open(«c:/zad_1.txt»,ios::out);
for(int i=0;i<5;i++)
{
cout << «Имя:»;
cin >> name;
cout << «Возраст»;
cin>>year;
myFile << name << « «;
myFile << year << '\n';
}
myFile.close();
getch();
return 0;
}
78

79
Задача 2. Написать программу, которая выводит данные на экран монитора
из файла zad_1.txt.
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
int main()
{
char name[20];
int year;
ifstream myFile;
myFile.open(«c:/zad_1.txt»,ios::in);
for(int i=0;i<5;i++)
{
myFile >> name;
cout << name << « «;
myFile >> year;
cout << year << '\n';
}
myFile.close();
getch();
return 0;
}
Задача 3. Описать структуру с именем Student, содержащую следующие по-
ля: фамилия, имя, отчество, номер зачетной книжки и средний балл. С клавиатуры
ввести данные учеников одного класса и записать в файл (studens.txt). Из файла
извлечь ФИО учеников, чей средний балл между 4 и 5.
Решение:
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
struct Student
{
char first_name[20];
char second_name[20];
char last_name[20];
double sr_ball;
char num[11];
};
int main()
{
Student students;
fstream file;
file.open(«c:/students.txt»,ios::in);
int n,i;
cout << «Введите число учеников»;
cin >> n;
for(i=0;i<n;i++)
{
cout << «Имя:»;
cin >> students.first_name;
cout << «Отчество:»;
cin >> students.second_name;
cout << «Фамилия:»;
cin >> students.last_name;

cout << «Средний балл:»;
cin >> students.sr_ball;
cout << «Номер:»;
cin >> students.num;
file << students.first_name << « «;
file << students.second_name << « «;
file << students.last_name << « «;
file << students.sr_ball << « «;
file << students.num << '\n';
}
file.seekg(0);
for(i=0;i<n;i++)
{
file >> students.first_name;
file >> students.second_name;
file >> students.last_name;
file >> students.sr_ball;
file >> students.num;
if(students.sr_ball>=4&&students.sr_ball<=5)
{
cout << students.first_name << « «;
cout << students.second_name << « «;
cout << students.last_name << endl;
}
}
file.close();
getch();
return 0;
}
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
