Форум программистов, компьютерный форум CyberForum.ru

Найти 100 первых простых чисел - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 253, средняя оценка - 4.74
Raynk
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 6
17.08.2009, 09:04     Найти 100 первых простых чисел #1
Привет всем помогите пожалуйста кто может у меня такая проблема не могу решить задачи по C++ потому что я не понимаю этот язык программирования вот несколько заданий.

1. Найти 100 первых простых чисел.
2. Дано число n. Напечатать те натуральные числа, квадрат которых не превышает n.
3. Дан массив x [1]..x[n] целых чисел. Не используя других массивов, переставить элементы массива в обратном порядке.
4. Дано слово. Определить, одинаковы ли второй и четвертый символы в нем.
5. Дано слово. Получить его часть, образованную идущими подряд буквами, начиная с k-й и кончая m-й, (k и m вводятся с клавиатуры).
6. Дана прямоугольная таблица a[1:n,1:m]. Найти минимальный из максимумов строк, т.е. min (max aij ), 1 <= i <= n, 1 <= j <= m
7. Все элементы матрицы, кроме диагональных, заменить единицами.
8. Дана квадратная таблица a[1:n,1:n]. Найти номер строки, содержащей наибольшее число нулей.
9. В соревнованиях по прыжкам в длину участвовали N-спортсменов. Каждый спортсмен мог сделать М-попыток. Результаты (длины прыжков) занесены в таблицу A[1:M,1:N]. Если результат не засчитывали, то вместо длины прыжков заносили ноль. Составить алгоритм, который дает возможность определить лучший результат К-ого спортсмена.
10. Дан массив данных о работающих на фабрике: фамилия, имя, отчество, адрес (улица, дом, квартира) и дата поступления на работу (месяц, год). Определить, есть ли в списке Ивановы (Иванов, Иванова), если есть, то вывести их адрес (адреса) и посчитать из них количество, проработавших не менее двух лет на сегодняшний день.
11. Даны два одномерных массива A[n] и B[n]. Получить массив С[2,n], первая строка которого – упорядоченные по возрастанию элементы B[n], вторая строка – упорядоченные по убыванию элементы A[n]. Использовать алгоритм вставки.

Пожалуйста решите эти задания кто сможет зарание благодарен!!!!!!!!!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.08.2009, 12:51     Найти 100 первых простых чисел #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
N2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
 
int main()
{
    setlocale (LC_ALL, "Russian");
    int n, ch(0);
    std::cout<<"Введите  число n:\n",
        std::cin>>n;
    while (true)
    {
        if(ch * ch < n)
        {
            std::cout<<ch<<' ';
            ch++;
        }
        else
            break;
    }
    system("pause");
    return 0;
}


N4

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    setlocale (LC_ALL, "Russian");
    char word[30];
    std::cout<<"Введите слово:\n";
    std::cin.getline(word, 30);
    if((int)word[2] == (int)word[4])
        std::cout<<"Четвертый и второй символы одинаковы\n";
    else
        std::cout<<"Четвертый и второй символы не одинаковы\n";
    system("pause");
    return 0;
}


В обоих есть ошибки !
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
17.08.2009, 14:47     Найти 100 первых простых чисел #3
Цитата Сообщение от Raynk Посмотреть сообщение
1. Найти 100 первых простых чисел.
N1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////////
bool prov(int a)
{
    int i,k,
        flag;
    for(i = 2; i <= a;i++)
    {
        flag = 1;
        for(k = 2; k*k <= i;k++)
        {
            if(i % k == 0)
            {
                flag = 0;
                break;
            }
        }
    }
    if(flag == 1)
        return 1;
    return 0;
}
 
int main(int argc, char* argv[])
{
    setlocale(0,"");
    int k = 0;
    cout << "Сто первых простых чисел:" << endl;
    for(int i = 2; i < RAND_MAX;i++)
    {
        if(prov(i))
        {
            cout << ++k << ") " << i << endl;
        }
        if(k == 100)
            break;
    }
    getchar();
    return 0;
}


Цитата Сообщение от Raynk Посмотреть сообщение
3. Дан массив x [1]..x[n] целых чисел. Не используя других массивов, переставить элементы массива в обратном поряд¬ке.
N3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <ctime>
using namespace std;
//////////////////////////////////////////////////////////////////////////
void out(int* a,int n);
void vin(int* a,int n);
void perestan(int *a,int n);
//////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
    setlocale(0,"");
    int *a,
        n;
    cout << "Введите количество элементов в массиве: ";
    wcin >> n;
    _flushall();
    a = new int[n];
    vin(a,n);
    cout << "Массив:" << endl;
    out(a,n);
    cout << "Массив(элементы в обратном порядке):" << endl;
    perestan(a,n-1);
    out(a,n);
    getchar();
    return 0;
}
//////////////////////////////////////////////////////////////////////////
void out(int* a,int n)
{
    for(int i = 0; i < n; i++)
    {
        cout.width(5);
        cout << a[i];
    }
    cout << "\n\n";
}
//////////////////////////////////////////////////////////////////////////
void vin(int* a,int n)
{
    srand((unsigned)time(NULL));
    for (int i = 0; i < n;i++)
    {
        a[i] = rand()%401-200;
    }
}
//////////////////////////////////////////////////////////////////////////
void perestan(int *a,int n)
{
    for (int i = 0 ; i < n/2;i++)
    {
        a[i] ^= a[n-i] ^= a[i] ^= a[n-i]; 
        /*a[n-i] = a[i] + a[n-i];
        a[i] = a[n-i] - a[i];
        a[n-i] = a[n-i] - a[i];*/
    }
}
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.08.2009, 17:39     Найти 100 первых простых чисел #4
№6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
int main()
{
    setlocale (LC_ALL, "Russian");
    int n, m, i, j;
    std::cout<<"Введите размерность:\nn = ", std::cin>>n, std::cout<<"m = ", std::cin>>m; 
    int **matr = new int*[n];
    for(i = 0; i < n; ++i)
        matr[i] = new int[m];
    system("cls");
    std::cout<<"Введите матрицу размерностью "<<n<<'x'<<m<<":\n";
    for (i = 0; i < n; ++i)
        for(j = 0; j < m; ++j)
            std::cin>>matr[i][j];
    std::cout<<"Введенная матрица:\n";
    for(i = 0; i < n; ++i, std::cout<<'\n')
        for(j = 0; j < m; ++j)
            std::cout<<matr[i][j]<<' ';
    int *mas = new int[n]; 
    for(i = 0; i < n; ++i)
    {
        mas[i] = matr[i][0];
        for(j = 0; j < m; ++j)
            if(matr[i][j] > mas[i])
                mas[i] = matr[i][j];
    }
    int min = mas[0];
    for(i = 1; i < n; ++i)
        if(mas[i] < min)
            min = mas[i];
 
    std::cout<<"Минимальный из максимумов строк равен "<<min<<'\n';
    system("pause");
    return 0;
}


Добавлено через 7 минут 14 секунд
№7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int main()
{
    setlocale (LC_ALL, "Russian");
    int n, i, j;
    std::cout<<"Введите размерность:\nn = ", std::cin>>n; 
    int **matr = new int*[n];
    for(i = 0; i < n; ++i)
        matr[i] = new int[n];
    system("cls");
    std::cout<<"Введите матрицу размерностью "<<n<<'x'<<n<<":\n";
    for (i = 0; i < n; ++i)
        for(j = 0; j < n; ++j)
            std::cin>>matr[i][j];
    std::cout<<"Введенная матрица:\n";
    for(i = 0; i < n; ++i, std::cout<<'\n')
        for(j = 0; j < n; ++j)
            std::cout<<matr[i][j]<<' ';
    for(i = 0; i < n; ++i)
        for(j = 0; j < n; ++j)
            if((i != j) && (i + j != n-1))
                matr[i][j] = 1;
    std::cout<<"\nРезультат:\n";
    for(i = 0; i < n; ++i, std::cout<<'\n')
        for(j = 0; j < n; ++j)
            std::cout<<matr[i][j]<<' ';
    system("pause");
    return 0;
}


Добавлено через 7 минут 27 секунд
№8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
int main()
{
    setlocale (LC_ALL, "Russian");
    int n, i, j;
    std::cout<<"Введите размерность:\nn = ", std::cin>>n; 
    int **matr = new int*[n];
    for(i = 0; i < n; ++i)
        matr[i] = new int[n];
    system("cls");
    std::cout<<"Введите матрицу размерностью "<<n<<'x'<<n<<":\n";
    for (i = 0; i < n; ++i)
        for(j = 0; j < n; ++j)
            std::cin>>matr[i][j];
    std::cout<<"Введенная матрица:\n";
    for(i = 0; i < n; ++i, std::cout<<'\n')
        for(j = 0; j < n; ++j)
            std::cout<<matr[i][j]<<' ';
    int *mas = new int[n]; 
    for(i = 0; i < n; ++i)
    {
        mas[i] = 0;
        for(j = 0; j < n; ++j)
            if(matr[i][j] == 0)
                mas[i]++;
    }
    int max = mas[0], index(0);
    for(i = 1; i < n; ++i)
        if(mas[i] > max)
        {
            max = mas[i];
            index = i;
        }
    std::cout<<"Номер строки, содержащей наибольшее число нулей: "<<index<<'\n';
    system("pause");
    return 0;
}


Добавлено через 10 минут 59 секунд
№9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int main()
{
    //возьмем незасчитаный прыжок - меньше или равно 3 по шкале от 0 до 10
    setlocale (LC_ALL, "Russian");
    int n, m, i, j;
    std::cout<<"Введите количество спортсменов: ", std::cin>>n,
        std::cout<<"Введите количество попыток: ", std::cin>>m; 
    int **matr = new int*[n];
    for(i = 0; i < n; ++i)
        matr[i] = new int[m];
    system("cls");
    std::cout<<"Введите результаты прыжков "<<n<<" спортсменов за "<<m<<" попыток:\n";
    for (i = 0; i < n; ++i)
        for(j = 0; j < m; ++j)
        {
            std::cin>>matr[i][j];
            if(matr[i][j] <= 3)
                matr[i][j] = 0;
        }
    std::cout<<"Введенные результаты:\n";
    for(i = 0; i < n; ++i, std::cout<<'\n')
        for(j = 0; j < m; ++j)
            std::cout<<matr[i][j]<<' ';
    int k, max(0);
    std::cout<<"Введите номер спортсмена: ", std::cin>>k;
    for(i = 0; i < m; ++i)
        if(matr[k][i] > max)
            max = matr[k][i];
    std::cout<<"Лучший результат "<<k<<"-ого спортсмена: "<<max<<std::endl;
    system("pause");
    return 0;
}
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
17.08.2009, 17:54     Найти 100 первых простых чисел #5
2M128K145: Задание N2 - ошибка!
Не превышает - это значит меньше либо равен.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.08.2009, 17:56     Найти 100 первых простых чисел #6
№11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
int main()
{
    setlocale (LC_ALL, "Russian");
    int n, i, j, temp;
    std::cout<<"Введите количество элементов: ", std::cin>>n;
    int *mas1 = new int[n];
    int *mas2 = new int[n];
    int **mas = new int*[2];
    mas[0] = new int[n];
    mas[1] = new int[n];
    std::cout<<"Введите первый массив:\n";
    for(i = 0; i < n; ++i)
        std::cin>>mas1[i];
    std::cout<<"Введите второй массив:\n";
    for(i = 0; i < n; ++i)
        std::cin>>mas2[i];
    for (i = 1; i < n; i++)
    {
        temp = mas1[i];
        for (j = i - 1; j >= 0; j--)
        {
            if (mas1[j] > temp) 
                break;
            mas1[j+1] = mas1[j];
        }
        mas1[j+1] = temp;
    }
    for (i = 1; i < n; i++)
    {
        temp = mas2[i];
        for (j = i - 1; j >= 0; j--)
        {
            if (mas2[j] < temp) 
                break;
            mas2[j+1] = mas2[j];
        }
        mas2[j+1] = temp;
    }
    for(i = 0; i < n; ++i)
    {
        mas[0][i] = mas2[i];
        mas[1][i] = mas1[i];
    }
    std::cout<<"Результат:\n";
    for(i = 0; i < 2; ++i, std::cout<<'\n')
        for(j = 0; j < n; ++j)
            std::cout<<mas[i][j]<<' ';
    system("pause");
    return 0;
}
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
17.08.2009, 17:56     Найти 100 первых простых чисел #7
2M128K145: Задание N4.
Нет контроля что в слове есть 4 буквы.
Нет необходимости приводить к int:
C++
1
if((int)word[2] == (int)word[4])
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
17.08.2009, 18:01     Найти 100 первых простых чисел #8
К тому же явная ошибка: это в русском языке буквы нумеруются с 1-ой, а в C/C++ массивы начинаются с 0, так что сравнение должно быть таким:
C++
1
if ( word[1] == word[3] )
Добавлено через 1 минуту 23 секунды
вставь пжа знак
Куда именно ?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.08.2009, 19:09     Найти 100 первых простых чисел #9
Я привожу к инту, потому что в таких задачах мне привычнее работать с кодами символов. Вот вроде исправил. Кстати там могут встречаться такого рода ошибочки, поскольку я в основном выкладываю пример работы на С++, а не совсем готовое решение
C++
1
2
3
4
5
6
7
    if(strlen(word)>3)
        if(word[1] == word[3])
            std::cout<<"Четвертый и второй символы одинаковы\n";
        else
            std::cout<<"Четвертый и второй символы не одинаковы\n";
    else
        std::cout<<"Строка короче четырех символов\n";
вставить вот сюда
C++
1
if(ch * ch <= n)
если не сложно )))

Добавлено через 1 час 1 минуту 37 секунд
исправленный №2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    setlocale (LC_ALL, "Russian");
    int n, ch(0);
    std::cout<<"Введите  число n:\n",
        std::cin>>n;
    while (true)
    {
        if(ch * ch <= n)
        {
            std::cout<<ch<<' ';
            ch++;
        }
        else
            break;
    }
    std::cout<<'\n';
    system("pause");
    return 0;
}

исправленный №4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{
    setlocale (LC_ALL, "Russian");
    char word[30];
    std::cout<<"Введите слово:\n";
    std::cin.getline(word, 30);
    if(strlen(word)>3)
        if(word[1] == word[3])
            std::cout<<"Четвертый и второй символы одинаковы\n";
        else
            std::cout<<"Четвертый и второй символы не одинаковы\n";
    else
        std::cout<<"Строка короче четырех символов\n";
    system("pause");
    return 0;
}
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
17.08.2009, 20:03     Найти 100 первых простых чисел #10
2insolent: Задача N1 похоже решена верно, но вот цикл в строке 8:
C++
1
for(i = 2; i <= a;i++)
не нужен совершенно.
Достаточно i= a;

Есть другой алгоритм - через массив.
Записываем ранее найденные простые числа в массив и используем этот массив для проверки.

Добавлено через 35 минут 47 секунд
N1 через массив (Поиск простых чисел)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <math.h>
 
using namespace std;
 
const int MAX_S_SIZE= 100;
 
void calc_simple( int size, int *data );
 
 
/**************************************/
int main( void ) {
 
int i;
int sa[MAX_S_SIZE];
 
calc_simple( MAX_S_SIZE, sa );
for ( i= 0; i<MAX_S_SIZE; i++ ) {
    cout <<" " <<sa[i];
}
cout <<endl;
 
return 0;
 
} // main()
 
 
/**************************************/
void calc_simple( int size, int *data ) {
 
int sn, tind, outind, max_div;
bool s_flag;
 
if ( size<1 ) { return; }
 
data[0]= 2;
outind= 1;
sn= 1;
for ( ; outind<size; outind++ ) {
    for ( ; ; ) {
        sn+= 2;
        s_flag= 1;
        max_div= (int)sqrt( sn );
        for ( tind= 1; tind<outind; tind++ ) {
            if ( data[tind] > max_div ) { break; }
            if ( sn % data[tind] == 0 ) {
                s_flag= 0; break;
            }
        }
        if ( s_flag ) { break; }
    }
    data[outind]= sn;
}
    
} // calc_simple()


Добавлено через 10 минут 14 секунд
2isolent: Задача N3.
Это конечно круто, но почему нельзя использовать доп. переменную ?
N3 - другой вариант

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
 
using namespace std;
 
void reverse( int size, int *data );
 
 
/**************************************/
int main( void ) {
 
int i;
const int N= 10;
int arr[N]= { 2, 5, 8, 8, 10, 1, 20, 80, 10, 15 };
 
 
cout <<"before:";
for ( i= 0; i<N; i++ ) {
    cout <<" " <<arr[i];
}
cout <<endl;
 
reverse( N, arr );
 
cout <<"after:";
for ( i= 0; i<N; i++ ) {
    cout <<" " <<arr[i];
}
cout <<endl;
 
return 0;
 
} // main()
 
 
/**************************************/
void reverse( int size, int *data ) {
 
int i, j;
int t;
 
for ( i= 0, j= size-1; i<j; i++, j-- ) {
    t= data[i]; data[i]= data[j]; data[j]= t;
}
    
} // reverse()
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.08.2009, 20:24     Найти 100 первых простых чисел #11
№10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
struct Worker
{
    char fName[20];
    char lName[20];
    char address[300];
    int month;
    int year;
};
std::istream& operator>>(std::istream& in, Worker &work)
{
    std::cout<<"Last Name\n> ", in>>work.lName;
    std::cout<<"First Name\n> ", in>>work.fName;
    std::cout<<"Date:\nMonth\n> ",
        in>>work.month,std::cout<<"Year\n> ",in>>work.year;
    std::cout<<"Address\n> ", in>>work.address;
    return in;
}
std::ostream& operator<<(std::ostream& out, Worker &work)
{
    std::cout<<"Last Name\n> ", out<<work.lName;
    std::cout<<"\nFirst Name\n> ", out<<work.fName;
    std::cout<<"\nDate:\nMonth\n> ",
        out<<work.month,std::cout<<"\nYear\n> ",out<<work.year;
    std::cout<<"\nAddress\n> ", out<<work.address<<'\n';
    return out;
}
int main()
{
    const int n = 2;
    Worker pointer[n];
    int i;
    for(i = 0; i < n; ++i)
        std::cout<<"\nWorker # "<<i+1<<std::endl,
        std::cin>>pointer[i];
    for(i = 0; i < n; ++i)
        std::cout<<"\nnWorker # "<<i+1<<std::endl,
        std::cout<<pointer[i];
    int mNow, yNow;
    std::cout<<"Current date\nMonth: ",
        std::cin>>mNow,
        std::cout<<"Year: ",
        std::cin>>yNow;
    char search[] = "ivanov";
    int count(0);
    char *wName;
    std::cout<<"\nStreets:\n";
    for(i = 0; i < n; ++i)
    {
        wName = strlwr(pointer[i].lName);
        if(strncmp(search, wName, 6) == 0)
        {
            std::cout<<pointer[i].address<<std::endl;
            if(((yNow - pointer[i].year) > 2) ||
                ((yNow - pointer[i].year == 2)&& (mNow >= pointer[i].month)))
                count++;
        }
    }
    std::cout<<"\nCount workers - "<<count<<'\n';
    system("pause");
    return 0;
}


Добавлено через 2 минуты 8 секунд
odip, ты мне напоминаеш кошака с авки mirso который за всеми наблюдает
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
17.08.2009, 20:29     Найти 100 первых простых чисел #12
Цитата Сообщение от odip Посмотреть сообщение
Задача N1 похоже решена верно, но вот цикл в строке 8:
...
не нужен совершенно.
Достаточно i= a;
Возможно, просто я на этапе решения пришел к такому "выводу" - запустил - норм работает)

Цитата Сообщение от odip Посмотреть сообщение
Это конечно круто, но почему нельзя использовать доп. переменную
Просто было оговорка про доп. массив; я подумал: не "спотыкаться" через врем. переменную..
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
17.08.2009, 20:30     Найти 100 первых простых чисел #13
2M128K145: А N5 чего не решил ?

Не - раз задачи уже решили, то я хоть ошибки в них поищу
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
17.08.2009, 21:20     Найти 100 первых простых чисел #14
Цитата Сообщение от Raynk Посмотреть сообщение
5. Дано слово. Получить его часть, образованную идущими подряд буквами, начиная с k-й и кончая m-й, (k и m вводятся с клавиатуры).
вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
//////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    string word,part;
    int k,m;
    bool temp = true;
    cout << "Введите слово: ";
    getline(cin,word);
    do
    {
        cout << "Введите k: ";
        wcin >> k;
        cout << "Введите m: ";
        wcin >> m;
        if((k >= 0) && (m > k) && (m < word.size()))
            temp = false;
    }while(temp);
    _flushall();
    word.erase(m,word.size());
    part = word.erase(0,k);
    cout << "Часть слова: " << part;
    getchar();
    return 0;
}


P.S. если я правильно понял задание..)
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
17.08.2009, 22:05     Найти 100 первых простых чисел #15
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если я правильно понял задание, то вот
№5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
int main()
{
    setlocale (LC_ALL, "Russian");
    char word1[30];
    std::cout<<"Введите слово:\n";
    std::cin.getline(word1, 30);
    char *word;
    word = strlwr(word1);
input:
    char k[2], m[2];
    std::cout<<"\nВведите\nk: ", std::cin.getline(k, 2),
        std::cout<<"m: ", std::cin.getline(m, 2);
    if((int)k[0] > (int)m[0])
    {
        std::cout<<"Вторая буква должна быть больше первой";
        goto input;
    }
    char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
    unsigned int start = (int)k[0] - 97;
    int z = (int)m[0] - (int)k[0] + 1;
    bool flag = false;
    if(z > strlen(word))
        goto exit;
    unsigned int i;
    int j;
    char *rezult = new char[z];
    for(i = 0; i < strlen(word) - z; ++i)
    {
        if((int)word[i] == (int)k[0])
        {
            if((int)word[i + z-1] == (int)m[0])
            {
                int count(0);
                for(j = 0; j < z; ++j)
                    if(word[i + j] != alphabet[start + j])
                        goto fore;
                    else
                    {
                        rezult[j] = word[i + j];
                        count++;
                    }
                if(count == z)
                {
                    flag = true;
                    goto exit;
                }                       
            }
        }
        if((int)word[i] != (int)k[0] && i == strlen(word) - z - 1)
            goto exit;
        fore:
        ;
    }
exit:
    if(flag)
    {
        std::cout<<"\nПолученное слово:\n";
        for(j = 0; j < z; ++j)
        std::cout<<rezult[j];
    }
    else
        std::cout<<"\nТакой последовательности нету";
    std::cout<<'\n';
    system("pause");
    return 0;
}

odip, ни слова про этот код, я сам и так про него все знаю
insolent, насколько я понял, то есть произвольная строка, пользователь вводит две буквы, напр. b и e и программа должна найти в строке вхождение такой последовательности - bcde. Но не буду утверждать, ждем ТС
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
18.08.2009, 08:36     Найти 100 первых простых чисел #16
2M128K145: А я так понял что просто нужно вырезать часть строки от k-той позиции до m-той позиции. То есть задание тривиально

я думаю что эти задания правильно решены
Там где я ошибки указывал и они были исправлены - там правильно.
А вот в остальных не уверен.
Точнее уверен что там есть ошибки, но пожалел M128K145
Помогите ещё задачи решить.
И так у нас есть еще задачи T1-T14

Добавлено через 1 минуту 5 секунд
Кстати insolent в посте #14 решил именно так, как я понимаю задание
Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
18.08.2009, 20:47     Найти 100 первых простых чисел #17
Сообщение было отмечено автором темы, экспертом или модератором как ответ
мое понимание №2
внесём разнообразие (:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <boost/iterator/counting_iterator.hpp>
#include <boost/lambda/lambda.hpp>
#include <algorithm>
#include <iterator>
#include <iostream>
 
namespace lm = boost::lambda;
 
// 2. Дано число n. Напечатать те натуральные числа, квадрат которых не превышает n.
 
void product(size_t N)
{
    std::remove_copy_if(
        boost::counting_iterator<size_t>(1),
        boost::counting_iterator<size_t>(N+1),
        std::ostream_iterator<size_t>(std::cout, " "),      
        lm::_1 * lm::_1 > N
        );
}
 
int main()
{
    const size_t N = 81;
    product(N);
 
    return 0;
}
Вывод:
1 2 3 4 5 6 7 8 9
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
18.08.2009, 21:03     Найти 100 первых простых чисел #18
2Rififi: Ты решил задачу N2 из заголовка темы, а автор запостил еще несколько задач.
И потом boost для начинающих - это как-то сильно круто
M128K145 решил задачу N2 из второго набора задач.
Чтобы не было путаницы второй набор задач выложил в отдельную тему:
C++ не могу в нём разобраться (заход 2)
Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
18.08.2009, 21:10     Найти 100 первых простых чисел #19
odip,
2Rififi: Ты решил задачу N2 из заголовка темы, а автор запостил еще несколько задач.
я решил альтернативным способом последний выложенный вариант
остальные решать не хочется (:
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2009, 21:14     Найти 100 первых простых чисел
Еще ссылки по теме:

4. Найти N первых пар простых чисел, которые отличались бы друг от друга на 2 C++
Найти 10 первых натуральных чисел, оканчивающихся на цифру 7 кратных числу 9, не меньших 100 (Pascal -> C++) C++
Найти сто первых простых чисел C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
18.08.2009, 21:14     Найти 100 первых простых чисел #20
Дано число n. Напечатать те натуральные числа, квадрат которых не превышает n
Эта задача ?

Добавлено через 38 секунд
В C++ не могу в нём разобраться (заход 2) решается совсем другая задача.
Yandex
Объявления
18.08.2009, 21:14     Найти 100 первых простых чисел
Закрытая тема Создать тему
Опции темы

Текущее время: 15:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru