ОАП_решения_задачи
.pdf41 |
} |
|
if |
(ans) printf ("%d ", *(m + i)); |
|
|
} |
|
|
return |
0; |
} |
|
|
Задача 6.2
Найти
#include "stdafx.h" #include <iostream> #include <stdio.h> using namespace std; int main (void)
{for(;;)
{int mtr [ 100 ]; int *a;
int m, n, k, i ; a = mtr;
cout << "n = "; cin >> n; cout << "m = "; cin >> m; cout << '\n';
for (int i=0; i<(m*n); i++)
{cout << "a = ";
cin >> *(a+i);
}cout << '\n';
int s, num;
for (i=num=0; i<(m*n); i++)
{for (int j=s=0; j<(m*n); j++)
if (*(a+i) == *(a+j)) s++;
if (*(a+i)>num && s==m) num = *(a+i);
}
for (i=0; i<m; i++)
{for (int j=0; j<n; j++)
|
{if (*(a + j + i*n) == num) |
||
|
|
cout |
<< '[' << *(a + j + i*n) << ']'; |
|
else |
cout << ' |
' << *(a + j + i*n) << ' '; |
|
} |
|
|
|
cout << '\n' << |
'\n'; |
|
} |
if(num) |
cout << "Number " << num; |
else cout << "...";
42cout << '\n' << '\n';
}
return 0;
}
Задача 6.3
Сформировать одномерный массив целых чисел, используя датчик случайных чисел и выполнить задание c использованием индексов . Удалить все элементы с заданным значением. Добавить перед каждым четным элементом массива элемент со значением 0.
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <cmath> #include <ctime> using namespace std;
int _tmain(int argc, _TCHAR* argv[]) { srand ((unsigned)time(NULL));
int n,i,j,m,a[100];
43 |
cin>>n>>m; |
for (i=1;i<=n;i++) |
|
|
*(a+i)=rand ()%6; |
|
for (i=1;i<=n;i++ ) cout<<*(a+i)<<" "; |
|
cout<<endl; |
|
for (i=1;i<=n;i++) |
|
{ |
if (*(a+i)==m)
{
for (j=i;j<=n-1;j++) *(a+j)=*(a+j+1);
n--;
}
}
for (i=1;i<=n;i++)
{
if (*(a+i)%2==0)
{
for (j=n;j>=i;j--) *(a+j+1)=*(a+j);
n++;
*(a+i)=0;
i++;
}
}
for (i=1;i<=n;i++ ) cout<<*(a+i)<<" "; cout<<endl;
return 0;
}
Задача 6.4
Сформировать одномерный массив целых чисел, используя ввод данных с клавиатуры и выполнить задание: c использованием индексов. Найти непрерывные участки, на которых сумма элементов равна 100
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <cmath> using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int n,i,j,a[1000],s,k; s=0;
cin>>n;
for (i=1;i<=n;i++) 44 cin>>*(a+i); for (i=1;i<=n;i++)
{
s=*(a+i);
if (*(a+i)==100) cout<<*(a+i)<<endl; for (j=i+1;j<=n;j++)
{
s+=*(a+j); if(s==100 )
{
for (k=i;k<=j;k++) cout<<*(a+k)<<" ";
cout<<endl;
}
}
}
return 0;
}
Задача 6.5
Даны два целочисленных массива К(m) и L(n). Найти наибольший элемент массива K, не имеющий себе равных в массиве L.
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <cmath> using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int m,n,k[30],l[20],i,j,max,q,w,e; cout<<"Vvedite m"<<endl; cin>>m;cin>>n; for(i=1;i<=m;i++)cin>>*(k+i); for(j=1;j<=n;j++)cin>>*(l+j); for(q=1;q<=m*2;q++)
{
max=-2147000000; for(i=1;i<=m;i++)
{
if (*(k+i)>max)
{
max=*(k+i);
w=i;
}
}
for(j=1;j<=n;j++)
{
if(max==*(l+j))
{
for(e=w;e<=m-1;e++) *(k+e)=*(k+e+1);
m--; break;
}
}
if(j==n+1)
{
cout<<max; return 0;
}
}
cout<<"No";
return 0;
45
}
46
Тема 7 Строки и указатели
Задача 7.1
Преобразовать строку следующим образом: удалить все символы “*”, и повторить каждый символ, отличный от “*”.
#include "stdafx.h" #include <stdio.h> #include <locale>
#define MaxLen 256
int main (void)
{
setlocale (LC_CTYPE, "Russian");
puts ("Введите строку");
char s[MaxLen], ans[MaxLen * 2];
gets (s); int len = -1;
for (int i = 0; s[i]; i++) if (s[i] != '*')
{
ans[++len] = s[i]; ans[++len] = s[i];
}
ans[++len] = '\0'; puts (ans);
putchar ('\n'); return 0;
}
Задача 7.2
Проверить правильность расстановки круглых скобок в строке
#include "stdafx.h" #include <stdio.h> void main()
{
char s[256]; int i, c;
printf("Enter string: "); gets(s); for(c=i=0;s[i]!=0;i++)
{
if(s[i]=='(') c++; if(s[i]==')')
{
if(c<=0)
{
printf("%d\n", i+1); return;
}
c--;
}
}
if(!c) printf("0\n");
else printf("-1\n");
}
Задача 7.3
Функция создает копию строки и "переворачивает" ее. (Дополнительно: программа проверяет, не является ли исходная строка перевертышом)
#include "stdafx.h" #include<stdio.h> #include<iostream> #include <locale> #include<string.h> #include <windows.h>
using namespace std;
void perest(char *c, int *n)
{
int i,j,k,f=0; char buff;*n=0;
for(i=0;i<*n;i++)
if (c[0]==' ')for(i=0;c[i]==' ';i++); else i=0;
for (;c[i]!='\0';i++)
if (c[i]==' ' && c[i+1]!=' ' && c[i+1]!='\0')
*n=*n+1;{
f=i; for(j=i-1,k=i-f;j>k;j--,k++)
{
buff=c[j];
c[j]=c[k];
c[k]=buff;
}
}
if (*n!=0)*n=*n+1;
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_CTYPE, "Russian"); char c[100];
int N, n, i, k, x; gets(c); perest(c,&N);
printf("%s\n",c);
49
n=strlen(c);
if (n%2==0) x=n/2; else x=(n+1)/2; k=0;
for(i=0,n=n-1;i<=n;i++,n--) if (c[i]==c[n]) k++;
if (k==x)
cout<<"Это строка перевертыш"; else
cout<<"Это строка не перевертыш"; cout<<"Коли4ество слов равно:";cout<<N<<endl;
}
Задача 7.4
Написать программу, реализующую удаление k символов с позиции номер n из строки S. Не использовать стандартные операции и процедуры для строк символов.
#include "stdafx.h" #include <iostream> #include <stdio.h> using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale (LC_CTYPE,"Russian"); char S[100];
int k,n;
cout<<"Здравствуйте! Задайте строку"<<endl; cin>>S;
cout<<"Задайте позицию n"<<endl; cin>>n;
cout<<"Задайте количество элементов, которые нужно удалить"<<endl; cin>>k;
50 for (int i=0;i<k;i++) {int j=n;
while (S[j]!='\0') {S[j]=S[j+1];
j++;
};
}
cout<<"Новая строка: "<<endl; for (int i=0;S[i]!='\0';i++) cout<<S[i];
system ("PAUSE"); return 0;
}
Задача 7.5
Определите количество предложений в заданном тексте (предложение заканчивается либо точкой, либо вопросительным или восклицательным знаком).
#include "stdafx.h" #include <iostream> #include <stdio.h> #include <string.h> using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale (LC_CTYPE,"Russian"); char mas[100];
int sum=0;
cout<<"Здравствуйте! Задайте строку"<<endl; cin>>mas ;
int i=0; while(mas[i]!='\0')
{if ((mas[i]=='.')|| (mas[i]=='!')||(mas[i]=='?')) sum++;