Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.62/180: Рейтинг темы: голосов - 180, средняя оценка - 4.62
Raynk
0 / 0 / 0
Регистрация: 17.08.2009
Сообщений: 6
#1

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

17.08.2009, 09:04. Просмотров 32472. Ответов 70
Метки нет (Все метки)

Привет всем помогите пожалуйста кто может у меня такая проблема не могу решить задачи по 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]. Использовать алгоритм вставки.

Пожалуйста решите эти задания кто сможет зарание благодарен!!!!!!!!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2009, 09:04
Ответы с готовыми решениями:

Найти 100 первых простых чисел.
Простые, это те, которые делятся только на себя и на 1 :)

Найти первых 100 простых чисел
Найти первых 100 простых чисел. Помогите пожалуйста, никак не получается.

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

Четверки простых чисел из первых 100 натуральных
Привет всем Найти все четверки простых чисел из первых 100 натуральных,...

Найти сто первых простых чисел
1. Найти сто первых простых чисел.

70
M128K145
Эксперт JavaЭксперт С++
8324 / 3544 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
17.08.2009, 12:51 #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;
}


В обоих есть ошибки !
3
insolent
827 / 345 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
17.08.2009, 14:47 #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];*/
    }
}
2
M128K145
Эксперт JavaЭксперт С++
8324 / 3544 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
17.08.2009, 17:39 #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;
}
2
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
17.08.2009, 17:54 #5
2M128K145: Задание N2 - ошибка!
Не превышает - это значит меньше либо равен.
2
M128K145
Эксперт JavaЭксперт С++
8324 / 3544 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
17.08.2009, 17:56 #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;
}
1
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
17.08.2009, 17:56 #7
2M128K145: Задание N4.
Нет контроля что в слове есть 4 буквы.
Нет необходимости приводить к int:
C++
1
if((int)word[2] == (int)word[4])
1
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
17.08.2009, 18:01 #8
К тому же явная ошибка: это в русском языке буквы нумеруются с 1-ой, а в C/C++ массивы начинаются с 0, так что сравнение должно быть таким:
C++
1
if ( word[1] == word[3] )
Добавлено через 1 минуту 23 секунды
вставь пжа знак
Куда именно ?
1
M128K145
Эксперт JavaЭксперт С++
8324 / 3544 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
17.08.2009, 19:09 #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;
}
2
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
17.08.2009, 20:03 #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()
2
M128K145
Эксперт JavaЭксперт С++
8324 / 3544 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
17.08.2009, 20:24 #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 который за всеми наблюдает
1
insolent
827 / 345 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
17.08.2009, 20:29 #12
Цитата Сообщение от odip Посмотреть сообщение
Задача N1 похоже решена верно, но вот цикл в строке 8:
...
не нужен совершенно.
Достаточно i= a;
Возможно, просто я на этапе решения пришел к такому "выводу" - запустил - норм работает)

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

Не - раз задачи уже решили, то я хоть ошибки в них поищу
1
insolent
827 / 345 / 64
Регистрация: 30.01.2009
Сообщений: 1,204
17.08.2009, 21:20 #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. если я правильно понял задание..)
1
M128K145
Эксперт JavaЭксперт С++
8324 / 3544 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
17.08.2009, 22:05 #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. Но не буду утверждать, ждем ТС
1
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
18.08.2009, 08:36 #16
2M128K145: А я так понял что просто нужно вырезать часть строки от k-той позиции до m-той позиции. То есть задание тривиально

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

Добавлено через 1 минуту 5 секунд
Кстати insolent в посте #14 решил именно так, как я понимаю задание
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
18.08.2009, 20:47 #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
1
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
18.08.2009, 21:03 #18
2Rififi: Ты решил задачу N2 из заголовка темы, а автор запостил еще несколько задач.
И потом boost для начинающих - это как-то сильно круто
M128K145 решил задачу N2 из второго набора задач.
Чтобы не было путаницы второй набор задач выложил в отдельную тему:
C++ не могу в нём разобраться (заход 2)
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
18.08.2009, 21:10 #19
odip,
2Rififi: Ты решил задачу N2 из заголовка темы, а автор запостил еще несколько задач.
я решил альтернативным способом последний выложенный вариант
остальные решать не хочется (:
0
odip
Эксперт С++
7161 / 3220 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
18.08.2009, 21:14 #20
Дано число n. Напечатать те натуральные числа, квадрат которых не превышает n
Эта задача ?

Добавлено через 38 секунд
В http://www.cyberforum.ru/post244584.html решается совсем другая задача.
0
18.08.2009, 21:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2009, 21:14

Найти N первых пар простых чисел, которые отличались бы друг от друга на 2
Не могу понять, почему не делается проверка числа на простоту. #include...

Найти n первых простых чисел, сумма цифр у которых меньше заданного числа
Помогите написать программу! Условие: найти n первых простых чисел, сумма цифр...

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


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru