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

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

.pdf
Скачиваний:
113
Добавлен:
26.03.2015
Размер:
2 Мб
Скачать
☆

i++;}

51

cout<<"Количество предложений в заданном тексте "<<sum<<endl; system ("PAUSE");

return 0;

}

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

i++;}

cout<<"Количество предложений в заданном тексте "<<sum<<endl; system ("PAUSE");

return 0;

}

52

Тема 8 . Функции

Задача 8.1

Функция создает копию строки и "переворачивает" ее.

(Дополнительно: программа проверяет, не является ли исходная строка перевертышом)

#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); 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)

сout<<"Это строка перевертыш"; else

cout<<"Это строка не перевертыш"; cout<<"Коли4ество слов равно:";cout<<N<<endl;

}

Задача 8.2

Функция находит в строке самое длинное слово и возвращает указатель на него.

С ее помощью реализовать размещение слов в выходной строке в порядке убывания их длины.

#include "stdafx.h"

# include <iostream> #include <string.h> #include <stdio.h> #include <windows.h>

using namespace std;

int find(char *p)

{

int i,n,k,u,m; n=0;k=0;

if (p[0]==' ')

for(i=0;p[i]==' ';i++) n=0;

else i=0;

for (u=i;p[i]!=0;i++)

{

if (p[i]!=' ') n++;

else break;

}

while (p[i]!=0)

{

for (m=i;p[i]!=0 && p[i]==' ';i++)

{

k=0;

m++;

}

for (;p[i]!=0 && p[i]!=' ';i++)

54

k++;

if (k>n)

{

n=k;

u=m;

}

k=0;

}

return u;

}

void main()

{

char p[100],p1[100],p2[100]; int i=0,u,j=0,k,l; cout<<"Input string: "<<endl; gets(p);

l=strlen(p);

cout<<endl; while (j<l)

{

u=find(p);

for (i=u;p[i]!=0;i++,j++)

{

if(p[i]!=' ') p1[j]=p[i];

else break;

}

p1[j]=' '; k=0;

if (u!=0)

{for (i=0;i<u;i++,k++) p2[k]=p[i];}

if ((i+j)!=l)

{for (i=i+j;p[i]!=0;i++,k++) p2[k]=p[i];

p2[k]='\0';} else p2[k]='\0';

for (i=0;p2[i]!=0;i++) p[i]=p2[i];

p[i]='\0'; j++;

}

p[j--]='\0';

for (i=0;i<l;i++) cout <<p1[i]; cout <<endl;

}

Задача 8.3

Написать функцию, проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными элементами, удаленная строка заполняется 0 и переносится в конец массива.

#include "stdafx.h" #include <iostream> #include <math.h> #include <time.h>

bool check (int *p, int m)

{

int i;

for (i = 0; i < m && p[i]; i++); return i != m;

}

#define MaxN 100 int a[MaxN][MaxN];

int main ()

{

setlocale (LC_CTYPE, "Russian"); int n, m;

std::cout << "Введите размерность матрицы" << std::endl; std::cin >> n >> m;

srand ((unsigned) time (NULL)); for (int i = 0; i < n; i++)

{

for (int j = 0; j < m; j++)

{

a[i][j] = rand () % 10; std::cout << a[i][j] << ' ';

}

std::cout << std::endl;

}

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

if (check ((int*) a[i], m))

{

for (int k = i + 1; k < n; k++)

for (int j = 0; j < m; j++) std::swap (a[k][j], a[k - 1][j]); for (int j = 0; j < m; j++) a[n - 1][j] = 0;

}

std::cout << std::endl;

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

{

for (int j = 0; j < m; j++) std::cout << a[i][j] << ' '; std::cout << std::endl;

}

56

return 0;

}

57

Тема 9 Динамические многомерные массивы

Задача 9.1

Сформировать одномерный массив целых чисел,

используя датчик случайных чисел и выполнить задание c использованием индексов

Удалить последний элемент равный 0. Добавить после элемента массива с заданным индексом элемент со значением 100.

#include "stdafx.h" #include <stdio.h> #include <algorithm> #include <locale> #include <time.h>

int main (void)

{

setlocale (LC_CTYPE, "Russian");

int n;

printf ("Введите размерность массива\n"); scanf ("%d", &n);

int *a = new int[n];

srand ((unsigned) time (NULL));

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

{

a[i] = rand () % 10; printf ("%d ", a[i]);

}

putchar ('\n'); int pos;

for (pos = n - 1; pos >= 0 && a[pos] != 0; pos--);

pos == -1 ? printf ("Нету нулевого элемента\n") : printf ("Позиция последнего нулевого элемента:

%d\n", pos);

for (int i = pos; i < n - 1; i++) std::swap (a[i], a[i + 1]); printf ("Введите позицию элемента, после которого вставить 100\n"); scanf ("%d", &pos);

for (int i = n - 1; i > pos + 1; i--) std::swap (a[i], a[i - 1]); a[++pos] = 100;

for (int i = 0; i < n; i++) printf ("%d ", a[i]); putchar ('\n');

delete[] a; return 0;

}

Задача 9.2

В массиве M(k) много совпадающих элементов.

Найти количество различных элементов в нем (не упорядочивая массива).

#include "stdafx.h" #include <stdio.h> #include <locale> #include <math.h> #include <time.h>

int main (void)

{

setlocale (LC_CTYPE, "Russian");

int n;

printf ("Введите размерность массива\n"); scanf ("%d", &n);

int *m = new int [n];

srand ((unsigned) time (NULL)); for (int i = 0; i < n; i++)

{

m[i] = rand () % 10; printf ("%d ", m[i]);

}

printf ("\nНеповторяющиеся элементы\n");

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

{

bool ans = true;

for (int j = 0; j < n; j++)

{

if (i == j) continue; if (m[i] == m[j])

{

ans = false; break;

}

}

if (ans) printf ("%d ", m[i]);

}

59 delete[] m; return 0;

}

Задача 9.3

Преобразовать строку следующим образом: удалить все символы “*”, и повторить каждый символ, отличный от “*”.

#include "stdafx.h" #include <stdio.h> #include <locale> #define MaxLen 256

int main (void)

{

setlocale (LC_CTYPE, "Russian");

puts ("Введите строку");

char *s = new char [MaxLen], *ans = new char [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);

delete[] s, ans; putchar ('\n'); return 0;

}