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

Динам. память, указатели, строки - C++

Восстановить пароль Регистрация
 
Kizuru
0 / 2 / 0
Регистрация: 18.06.2011
Сообщений: 25
19.06.2011, 14:02     Динам. память, указатели, строки #1
хелп) а то не успеваю все решить)))

Задание 2
Написать программу которая позволяет пользователю ввести любое количество целых чисел, когда пользователь пожелает прекратить ввод, то все введенные им числа выводятся на экран в порядке возрастания.

Задание 3
Написать функцию, которая принимает указатель на массив и количество элементов. Функция сжимает массив, удаляя из него элементы равные 0. Возвращает указатель на новый массив, не содержащий 0.

Задание 4

Написать функцию которая принимает два указателя на строки, и если строки являются анаграммами(строка которая состоит из символов другой строки, но смысл строк разный), то функция возвращает true, иначе false.
Пример:
апельсин — спаниель
равновесие — своенравие
полковник — клоповник
стационар — соратница

В 4 задании нужно отсортировать по алфавиту и сравнить строки.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2011, 14:02     Динам. память, указатели, строки
Посмотрите здесь:

C++ Указатели и память
C++ Указатели. Динамическая память.
C++ Поиск пол/отр элементов. Матрицы, динам. память.
Указатели. Динамическая память в С++ C++
Указатели.Динамическая память. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
19.06.2011, 14:34     Динам. память, указатели, строки #2
Пока времени нет у меня, последний вариант держи. :cofee2:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool    x_strcmp(char* a, char* b) {
     sort(a, a + strlen(a));
     sort(b, b + strlen(b));
     if(! stricmp(a, b))
     return true;
     return  false;
}
 
 
 
 void  main(void){
 
    char a[] = "спаниель";
    char b[] = "апельсин";
 
    if(x_strcmp(a, b))
          puts("YES");
}
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
19.06.2011, 16:04     Динам. память, указатели, строки #3
Цитата Сообщение от Kizuru Посмотреть сообщение
Задание 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
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main() {
    vector<int> m;
    vector<int>::iterator i;
    int z;
 
    cout << "example:\nin > 1 2 3 4 5 6 7 8 q\n";
    cout << "in > ";
    while(cin >> z) {
        m.push_back(z);
    }
    stable_sort(m.begin(), m.end());
    i = m.begin();
    cout << "out> ";
    while (i != m.end()) {
        cout << *i++ << " ";
    }
    cout << endl;
    return 0;
}
Kizuru
0 / 2 / 0
Регистрация: 18.06.2011
Сообщений: 25
19.06.2011, 16:08  [ТС]     Динам. память, указатели, строки #4
Цитата Сообщение от tylix Посмотреть сообщение
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
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main() {
    vector<int> m;
    vector<int>::iterator i;
    int z;
 
    cout << "example:\nin > 1 2 3 4 5 6 7 8 q\n";
    cout << "in > ";
    while(cin >> z) {
        m.push_back(z);
    }
    stable_sort(m.begin(), m.end());
    i = m.begin();
    cout << "out> ";
    while (i != m.end()) {
        cout << *i++ << " ";
    }
    cout << endl;
    return 0;
}
а на Си не мог бы написать ^_^
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
19.06.2011, 16:13     Динам. память, указатели, строки #5
Цитата Сообщение от Kizuru Посмотреть сообщение

Задание 3
Написать функцию, которая принимает указатель на массив и количество элементов. Функция сжимает массив, удаляя из него элементы равные 0. Возвращает указатель на новый массив, не содержащий 0.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int* DelNull(int const *arr, int n)
{
    int size=n;
    for(int i=0;i<n;++i)
        if(arr[i]==0) --size;
    int *newarr=new int[size];
    for (int i=0,j=0;i<n&&j<size;++i)
        if(arr[i])
        {
            newarr[j]=arr[i];
            ++j;
        }
    return newarr;
}
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
19.06.2011, 16:45     Динам. память, указатели, строки #6
Цитата Сообщение от Kizuru Посмотреть сообщение
а на Си не мог бы написать ^_^
так нужно заранее об этом сообщать ))
а то не ясно, си си++ или вообще чел. ошибся разделом форума и ему нужно на паскале

Добавлено через 21 минуту
Цитата Сообщение от Kizuru Посмотреть сообщение
Задание 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <stdlib.h>
 
#define STEP 10
int main()
{
    int *m;
    int *p;
    int size  = STEP;
    int count = 0;
    int z, x, y;
 
    m = malloc(sizeof(int) * size);
    if (!m)
        return 0;
    while (scanf("%i", &z)) {
        if (count >= size) {
            p = malloc(sizeof(int)*(size + STEP));
            if (!p) {
                perror("Cannot get more mem\n");
                break;
            }
            memcpy(p, m, size * sizeof(int));
            free(m);
            m = p;
            size += STEP;
        }
        m[count] = z;
        count++;
    }
 
    for (y = count; y > 1; y--)
        for (x = 0; x < y-1; x++)
            if (m[x] > m[x+1]) {
                z = m[x];
                m[x] = m[x+1];
                m[x+1] = z;
            }
 
    for (x = 0; x < count; x++)
        printf("%i ", m[x]);
 
    free(m);
    return 0;
}
size = кол-во эл. под которые зарезервированно памяти
STEP = на сколько рез. доп.
count = кол-во введенных знач.
сортировка - метод. пуз.
ввод чисел до тех пор пока не будет введено не число
NickoTin
Модератор
 Аватар для NickoTin
8173 / 3477 / 233
Регистрация: 14.06.2010
Сообщений: 4,501
Записей в блоге: 9
19.06.2011, 17:10     Динам. память, указатели, строки #7
Цитата Сообщение от Kizuru Посмотреть сообщение
Задание 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
28
29
int main()
{
    int buffSize = 16;
    int count    = 0;
    int *pMem    = (int*)malloc(buffSize * sizeof(int));
    int t, x, y;
 
    while(scanf("%i", &t)) {
        if (count == buffSize)
            pMem = (int*)realloc(pMem, (buffSize *= 2) * sizeof(int));
 
        pMem[count] = t;
        ++count;
    }
 
    for (y = count; y > 1; --y)
        for (x = 0; x < y - 1; ++x)
            if (pMem[x] > pMem[x + 1]) {
                t = pMem[x];
                pMem[x] = pMem[x + 1];
                pMem[x + 1] = t;
            }
 
    for (x = 0; x < count; ++x)
        printf("%i\r\n", pMem[x]);
 
    free(pMem);
    return 0;
}
Kizuru
0 / 2 / 0
Регистрация: 18.06.2011
Сообщений: 25
19.06.2011, 20:11  [ТС]     Динам. память, указатели, строки #8
Цитата Сообщение от silentnuke Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int* DelNull(int const *arr, int n)
{
    int size=n;
    for(int i=0;i<n;++i)
        if(arr[i]==0) --size;
    int *newarr=new int[size];
    for (int i=0,j=0;i<n&&j<size;++i)
        if(arr[i])
        {
            newarr[j]=arr[i];
            ++j;
        }
    return newarr;
}
а можно пример к этой функции?)

Добавлено через 1 час 11 минут
еее ну хелп))
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
19.06.2011, 20:32     Динам. память, указатели, строки #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
#include <iostream>
#include <time.h>
using namespace std;
 
int* DelNull(int const *arr, int n)
{
    int size=n;
    for(int i=0;i<n;++i)
        if(arr[i]==0) --size;
    int *newarr=new int[size];
    for (int i=0,j=0;i<n&&j<size;++i)
        if(arr[i])
        {
            newarr[j]=arr[i];
            ++j;
        }
        return newarr;
}
 
void main()
{
    const int n=10;
    int arr[n]={1,2,5,0,0,0,2,5,0,0};
    for (int i=0;i<n;++i)
        cout<<arr[i]<<" ";
    int *mass=DelNull(arr,n);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2011, 20:43     Динам. память, указатели, строки
Еще ссылки по теме:

C++ Задание на указатели и динамическую память
C++ Класс для матрицы представленной динам. массивом указателей на строки
Задание на Указатели и Динамическую память C++

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

Или воспользуйтесь поиском по форуму:
NickoTin
Модератор
 Аватар для NickoTin
8173 / 3477 / 233
Регистрация: 14.06.2010
Сообщений: 4,501
Записей в блоге: 9
19.06.2011, 20:43     Динам. память, указатели, строки #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
#define BUFF_SIZE 10
 
int* DelNull (const int *arr, int* n)
{
    int size = *n;
    int *newarr = 0;
    int i, j;
 
    for(i = 0; i < *n; ++i)
        if(!arr[i])
            --size;
 
    newarr = (int*)malloc(size * sizeof(int));
 
    for (i = 0, j = 0; i < *n && j < size; ++i)
        if(arr[i]) {
            newarr[j] = arr[i];
            ++j;
        }
 
    *n = size;
    return newarr;
}
 
int main()
{
    int *pArr = (int*)malloc(BUFF_SIZE * sizeof(int));
    int *pResult = 0;
    int i = 0, x = 0;
 
    while(i < BUFF_SIZE && scanf("%i", &x)) {
        pArr[i] = x;
        ++i;
    }
 
    x = i;
    pResult = DelNull(pArr, &x);
 
    if (pResult) {
        for (i = 0; i < x; ++i)
            printf("%i\r\n", pResult[i]);
 
        free(pResult);
    }
 
    free(pArr);
 
    return 0;
}
Yandex
Объявления
19.06.2011, 20:43     Динам. память, указатели, строки
Ответ Создать тему
Опции темы

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