Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОАП_решения_задачи

.pdf
Скачиваний:
104
Добавлен:
26.03.2015
Размер:
1.69 Mб
Скачать

41

}

 

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++;