• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Задачи: Элементарые задачи. Работа со строками, символами числами

  • Автор темы ramzes0901
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

ramzes0901

1. Составить и протестировать функцию для замены символов ':' на '.' в заданной строке, начиная с указанной позиции.

2. Выяснить, сколько простых чисел находится в интервале [n,m], и распечатать их. Для определения, является ли очередное число простым, составить функцию.
 
D

DarkKnight

1. Составить и протестировать функцию для замены символов ':' на '.' в заданной строке, начиная с указанной позиции.
C++:
/*
1. Составить и протестировать функцию для замены символов ':' на '.' в заданной строке, начиная с указанной позиции.
*/
/*
codeby.net
Autor: DarkKnight125
*/
#include <iostream>

using namespace std;

//Функция замены символа : на . c указанием позиции
char* Zamen (char* str, int pos)
{
for (int i = pos-1; i<strlen(str); i++) //Обойдем всю строку от позиции
if (str[i] == ':') str[i] = '.'; //Если встретилось : то заменим на .
return str; //Вернем уже замененную строку

}
void main(void)
{
setlocale(LC_ALL,"Russian"); //Перевод локали в кодовую страницу 1251
char Str[1024] = {0}; //Наша строка
int Pos; //Позиция
cout<<"Введите строку: ";
gets(Str);
cout<<"Введите позицию с которой начать замену : ";
cin >> Pos;
cout<<"Строка после замены : "<< Zamen(Str,Pos)<< endl;

}
 

Вложения

  • strzamen.jpg
    strzamen.jpg
    18,5 КБ · Просмотры: 561
D

DarkKnight

2. Выяснить, сколько простых чисел находится в интервале [n,m], и распечатать их. Для определения, является ли очередное число простым, составить функцию.
C++:
/*
2. Выяснить, сколько простых чисел находится в интервале [n,m], и распечатать их.
Для определения, является ли очередное число простым, составить функцию. 
*/
/*
codeby.net
Autor: DarkKnight125
*/
#include <iostream>

using namespace std;
bool isSimpleNumeric (int Num)
{
bool isSimple = true; //Пойдем от противного, предположим что число - простое
if (Num<1) return false; //Если меньше то сразу вернем false;
for (int i = 2; i <Num; i++)//Обойдем все числа от 2 до Num-1
{
if (Num % i == 0) return false; //Если Num делится без остатка хоть на 1 такое число, то оно не просто
}
return isSimple; 
}
void main(void)
{
setlocale(LC_ALL,".1251"); //Установка локали в кодовую страницу .1251
int n,m; //Начало и конец промежутка
int SimpleCount = 0; //Кол-во простых числел на промежутке
cout<<"Введите начало интервала n = ";
cin>>n;
cout<<"Введите конец интервала m = ";
cin>>m;

for (int i = n; i<= m; i++)
if (isSimpleNumeric(i)) SimpleCount++;

cout<< endl <<"На заданном интервале "<<SimpleCount<<" простых чисел"<< endl;
}
 

Вложения

  • countsimple.jpg
    countsimple.jpg
    18,2 КБ · Просмотры: 641
A

acorn

DarkKnight125
поиск простых чисел можно значительно упростить: число является простым если оно не делится на все предыдущие простые числа.
хотя тут промежуток и может быть нерационально определять простые числа до n.. всё зависит от входных данных.
и еще - 1 тоже не является простым числом.
 
D

DarkKnight

Добавлено: p.s. хотя тут промежуток и может быть нерационально определять простые числа до n.. всё зависит от входных данных
угу.. Тут это не пройдет... Да и лишнюю память тоже занимать не хорошо, лучше уж процессорное время...
Но есть способы все же оптимизировать алгоритм, но автору это только лишний раз мозг запудрит...
Например начальная проверка на четность, и т.д.
 
H

hosm

for (int i = 2; i <Num; i++)//Обойдем все числа от 2 до Num-1
от 2 до ((Num+1) поделенное нацело на 2) достаточно.
Ибо максимальное число, на которое может поделиться Num, кроме себя самого - это то, которое получится при делении Num на 2.
 
T

Truymf

А вот мой вариант программы вычисляющей количество простых чисел...
Прошу не ругать, если что-то не так...
Также с радостью буду ожидать замечаний от профессионалов.
<!--shcode--><pre><code class='с++'>// Выяснить, сколько простых чисел находится в интервале [n,m], и распечатать их.
// Для определения, является ли очередное число простым, составить функцию.

#include<iostream>

using namespace std;

int prostoe(int k); //Прототип функции отбора простых чисел

void main()
{
int n,m,pros,q = 0; //n - начальное число интервала
cout << "Vvedite nachaljnoe chislo intervala n = "; //m - конечное число интервала
cin >> n;
cout << "Vvedite nachaljnoe chislo intervala m = ";
cin >> m;
for (int k = n;k<=m;k++)
{
pros = prostoe(k);
if (pros != 1) //Если ф-ция возвращает не 1 (0),то
{ //включается счетчик "q" и выписывается
q++; //простое число с номером
cout << "prostoe chislo N["<<q<<"] = "<< k <<endl;
}
}
if (q == 0) //Если счетчик = 0,то
{ //выводится на экран,что
cout << "na zadannom promegutke ni odnogo prostogo chisla."; //нет простых чисел
} //на заданном промежутке;
int s = q % 10; //ищем остаток от деления на 10;
int p = q % 100; //ищем "p" = остаток от деления на 100;
if (p == 11) //если "p" равно 11, то выводится сообщение ...
{
cout << "na zadannom promegutke "<< q << " prostih chisel.";
}
else //иначе
switch (s) //будем рассматривать отдельные случаи
{
case(0):
cout << "na zadannom promegutke "<< q <<" prostix chisel.";
break;
case(1):
cout << "na zadannom promegutke " << q << " prostoe chislo.";
break;
case(2):
case(3):
case(4):
case(5):
cout << "na zadannom promegutke " << q << " prostih chisla.";
break;
default:
cout << "na zadannom promegutke " << q << " prostih chisel.";
break;
}
}

int prostoe(int k)
{
for (int i =2;i < k;i++)
{if (k % i == 0)
return 1;
}
return 0;
}[/CODE]
 
L

lazybiz

Как бы там ни было вот реализация:
C++:
#include <iostream.h>

int fact_mod( int x, int p )
{
if ( x == 0 ) return 1;
return (x * fact_mod( x - 1, p )) % p;
}

int prime( int p )
{
return (fact_mod( p - 1, p ) + 1) % p == 0;
}

int main( void )
{
int		n, m, i, num;

cout << "Vvedite n: ", cin >> n;
cout << "Vvedite m: ", cin >> m;
if ( n < 2 ) n = 2;

cout << "Prostye 4isla: " << endl;
for ( i = n, num = 0; i <= m; i++ ) {
if ( prime( i ) ) {
cout << i << " ";
num++;
}
}
cout << endl << "Vsego prostyh 4isel: " << num << endl;

return 0;
}
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!