Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Задача 148. Создать функцию, подсчитывающую сумму чисел, предшествующих первому отрицательному элементу в массиве.

Поиск

 

// Программа отлажена в Visual Studio 2008 (27.05.2008)

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

 

 

// Сумма чисел до первого отрицательного

// элемента в массиве

float my_func(float *a, int n)

{ int flag = 0;

float s=0; float *uk1=a+n-1;

while(a <= uk1)

{ if(*a >= 0)

s=s + *a;

else

{ flag = 1; break;}

a++;

}

if(flag == 0)

return -777;

else

return s;

}

 

 

const int n = 7;

int main()

{ //float a[n]={2,4,6,88,9,10,15};

float a[n]={2,1,1,-1,1,1,1};

float s=my_func(a, n);

if (s < 0)

cout << "NOT FOUND\n";

else

cout<<s<<endl;

return 0;

}

 

Задача 149.Создать функцию, подсчитывающую сумму чисел, расположенных после последнего отрицательного элемента в массиве.

 

// Программа отлажена в Visual Studio 2008

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

 

// Сумма чисел после последнего отрицательного

// элемента в массиве

float my_func(float *a, int n)

{ int flag = 0;

float s=0; float *uk1=a+n-1;

while(uk1 >= a)

{

if (*uk1 < 0)

{ flag = 1; break;}

uk1--;

}

if(flag == 0)

return -777;

else

{ uk1++;

while(uk1 < a + n)

{ s=s + *uk1; uk1++;}

return s;

}

 

}

 

 

const int n = 7;

int main()

{ //float a[n]={2,4,6,88,-9,10,15};

float a[n]={2,1,1,1,1,1,1};

float s=my_func(a, n);

if (s < 0)

cout << "NOT FOUND\n";

else

cout<<s<<endl;

return 0;

}

 

 

Задача 150.Создать функцию, осуществляющую бинарный поиск заданного элемента Q в заданном упорядоченном массиве целых чисел.

 

Функция dicho() рализует бинарный поиск, используя механизм указтелей и адресную арифметику для обработки массива. Ранее (см задачу 92) этот алгоритм был реализван в стиле традиционной обработки массивов с применением индексирования.

 

// Программа отлажена в Visual Studio 2008

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

 

 

//двоичный поиск 3.06.2008

int dicho(int *x, int n, int Q)

{

int low=0,high=n-1, mid, flag=0;

while(low <= high &&!flag)

{

mid=(low+high)/2;

if(*(x+mid) == Q)

flag=1;

else

if(*(x+mid) < Q)

low=mid+1;

else

high=mid-1;

}

if(flag)

return mid;

else

return -777;

}

 

 

int main()

{

int i, Q,found;

int a[]={1,3,7,33,44,55,66,77,88};

int n=sizeof(a)/sizeof(int);

// Устанавливаем локализацию для выходного потока

wcout.imbue(locale("rus_rus.866"));

// Выводим строку на русском!

 

wcout<< L"введи ключ поиска\n";

scanf("%d",&Q);

found = dicho(a, n, Q);

if(found>=0)

wcout<< Q<<L" на "<<found<<L" месте\n";

else

wcout<<Q<< L" не найден\n";

getch();

}

 

 

Вот результат работы этой программы:

 

введи ключ поиска

33 на 3 месте

 

 

 

Задача 151.Создать функцию, которая удаляет из заданной строки текст, заключенный в круглые скобки (и), формируя новую строку. Функция в случае успеха возвращает 0, и некоторое отрицательное число при неудаче (-1 при отсутствии “(“, -2 при отсутствии “)”).

 

// Программа отлажена в Visual Studio 2005

#include<conio.h>

#include<stdio.h>

#include <iostream>

using namespace std;

 

 

// функция удаляет символы между (и)

int del_skob(char *s1, char *s2)

{

while(*s1!= '\0' && *s1!= '(')

*s2++ = *s1++;

if(*s1=='\0')

return -1;

while(*s1!= '\0' && *s1!= ')')

s1++;

if(*s1=='\0')

return -2;

s1++;

while(*s1!= '\0')

*s2++ = *s1++;

*s2=0;

return 0;

}

 

 

int main()

{

char s1[40]="12345(мама мыла раму)6789", s2[40];

int flag;

// Устанавливаем локализацию для выходного потока

wcout.imbue(locale("rus_rus.866"));

// Выводим строку на русском!

 

wcout<< L"Введи строку "; gets(s1);

flag=del_skob(s1, s2);

if (flag==-1)

{wcout << L"Нет ("; getch();return 0;}

if (flag==-2)

{wcout << L"Нет)"; getch(); return 0;}

else

puts(s2);

getch();return 0;

}

 

 

Задача 152. Создать строку, содержащую цифры и другие символы. Определить функцию типа указатель, которая в динамической области памяти (“куче”) формирует новую строку на базе исходной, удалив предварительно из неё цифры и записав оставшиеся символы в обратном порядке. Функция должна возвращать указатель на вновь сформированную строку.

 

 

// Программа отлажена в Visual Studio 2008 (24.05.2008)

#include <iostream>

using namespace std;

 

 

char *delzifr(char *s);

int main ()

{

char *str="988776ASDFGH1233^%&^888";

// Устанавливаем локализацию для выходного потока

wcout.imbue(locale("rus_rus.866"));

// Выводим строку на русском!

wcout<< L"Строка-результат: ";

cout<<delzifr(str)<<endl;

wcout<< L"Исходная строка: "<<str<<endl;

getch();return 0;

}

 

 

char *delzifr(char *s)

{

char *my_s= new char [strlen(s)];

// char *my_s=(char*)malloc(strlen(s));

char *uk1=s, *uk2=my_s;

while(*s)

s++; //End string

 

while(--s>=uk1)

{

if(*s<'0'|| *s>'9')

{

*my_s = *s;

my_s++;

}

 

}

*my_s ='\0';

return(uk2);

}

 

 



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 408; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.152.146 (0.008 с.)