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

Тема в разделе "C/C++/C#", создана пользователем ramzes0901, 22 ноя 2010.

Статус темы:
Закрыта.
  1. ramzes0901

    ramzes0901 Гость

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

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (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
      Размер файла:
      33,1 КБ
      Просмотров:
      90
  3. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (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
      Размер файла:
      32,5 КБ
      Просмотров:
      88
  4. BashOrgRu

    BashOrgRu Well-Known Member

    Регистрация:
    15 мар 2009
    Сообщения:
    78
    Симпатии:
    0
    Код (C++):
     for (int i = n; i<= m; i++)
    if (isSimpleNumeric(i)){
    SimpleCount++;
    printf("%d ",i);
    }
     
  5. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    DarkKnight125
    поиск простых чисел можно значительно упростить: число является простым если оно не делится на все предыдущие простые числа.
    хотя тут промежуток и может быть нерационально определять простые числа до n.. всё зависит от входных данных.
    и еще - 1 тоже не является простым числом.
     
  6. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    угу.. Тут это не пройдет... Да и лишнюю память тоже занимать не хорошо, лучше уж процессорное время...
    Но есть способы все же оптимизировать алгоритм, но автору это только лишний раз мозг запудрит...
    Например начальная проверка на четность, и т.д.
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    от 2 до ((Num+1) поделенное нацело на 2) достаточно.
    Ибо максимальное число, на которое может поделиться Num, кроме себя самого - это то, которое получится при делении Num на 2.
     
  8. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    OKEN , Лен ;-)
     
  9. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    DarkKnight125
    всё-таки OKEN о другом... или это я тебя не понимаю.
     
  10. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    это, наверно, входит в "и т.д." =)
     
  11. Truymf

    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]
     
  12. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Про Теорему Вильсона не читали?
    http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%...%BE%D0%BD%D0%B0
     
  13. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    по-моему найти факториал p задача более трудоемкая, нежели проверка делимости p на числа от 2х до p/2, хотя я могу ошибаться.
     
  14. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Как бы там ни было вот реализация:
    Код (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;
    }
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей