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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
#1

Задачки на Функциями с переменным числом параметров - C++

05.01.2013, 00:41. Просмотров 688. Ответов 19
Метки нет (Все метки)

Выручайте , очень надо сделать 2 задачки, не могу разобраться с Функциями с переменным числом параметров...


1. Написать функцию, которая формирует из заданного предложения новое с инверсным порядком слов. На основе разработанной функции вывести введенные предложения с обратным порядком слов.

2. В функцию с переменным числом параметров поступают действительные числа, количество которых задано первым параметром. Найти и вывести те из них, в которых первая цифра дробной части равна последней цифре целой части.
(со второй почти разобрался, но не могу понять как реализовать ввод чисел в функцию и еще кое что)..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2013, 00:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задачки на Функциями с переменным числом параметров (C++):

Функция с переменным числом параметров, как узнать кличество переданных параметров? - C++
Добрый вечер, можно не использовать int n, а каким то другим способом узнать количество переданных аргументов в функцию и адрес? int suma...

Функция с переменным числом параметров находящая максимальный элемент в списке параметров - C++
Написать функцию с переменным числом параметров:Максимальный из элементов в списке параметров, стоящих на нечетных местах....

Функция с переменным числом параметров - C++
Функция с переменным числом параметров. Задание: Среднее арифметическое с елементов в списке параметров ,которые стоят на парных местах.

Функции с переменным числом параметров - C++
функции с переменным числом параметров в качестве параметра форматная строка,как задать это дело в Cи и что можно сказать преподу

Функции с переменным числом параметров - C++
Функция должна принимать переменное количество аргументов, последним из которых является 0, и скажем просто их печатает. Делаю по примеру...

Функция с переменным числом параметров - C++
Написать функцию с переменным числом параметров, которая определяет количество чисел, являющихся точными квадратами (2, 4, 9, 16,. . . )...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
05.01.2013, 01:11 #2
эм, инверсионный порядок слов это в твоем понимании что?
пример:
1) просто тест - тсет отсорп
2) просто тест - отсорп тсет

что из выше перечисленного?
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
05.01.2013, 01:19  [ТС] #3
просто тест - тест просто
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
05.01.2013, 01:34 #4
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
#include <iostream>
#include <cstdarg>
 
void fucn(size_t n, ...)
{      
    va_list ap;
    va_start(ap, n);
 
    for (size_t i = 0; i < n; ++i)
    {
        double val = va_arg(ap, double);    
        //ваша проверка
        std::cout << val << std::endl;
    }
 
    va_end(ap);
}
 
int main(void)
{
    fucn(3, 1.1, 1.2, 1.3);
    return 0;
}
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
05.01.2013, 01:37 #5
1)
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 <cstdlib>
#include <string>
using namespace std;
 
const int size=20; // размер массива для хранения строки
 
char massive[size]; // Массив для хранения строки.
 
void show(char *massive); // Прототип функции для вывода массива в стандартном виде
void inshow(char *massive); // Прототип функции для вывода инверсионной строки.
 
void main()
{
    gets(massive);
    inshow(massive);
    cout<<'\n';
    show(massive);
    system("pause");
}
 
void enter()
{
    gets(massive);
}
 
void show(char *massive)
{
    int x=0;
    while(massive[x]!='\0')
    {
        cout<<massive[x];
        x++;
    }
}
 
void inshow(char *massive)
{
  // Доп. проверка на случай неполного заполнения массива, помогает избежать перекоса.
    int y=0;
    while(massive[y])
        y++;
 
    for(int x=y;x>=0;x--)
        cout<<massive[x];
}
Немного самопал, но вроде работает)
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
05.01.2013, 01:46  [ТС] #6
Цитата Сообщение от Pakisan Посмотреть сообщение
1)
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 <cstdlib>
#include <string>
using namespace std;
 
const int size=20; // размер массива для хранения строки
 
char massive[size]; // Массив для хранения строки.
 
void show(char *massive); // Прототип функции для вывода массива в стандартном виде
void inshow(char *massive); // Прототип функции для вывода инверсионной строки.
 
void main()
{
    gets(massive);
    inshow(massive);
    cout<<'\n';
    show(massive);
    system("pause");
}
 
void enter()
{
    gets(massive);
}
 
void show(char *massive)
{
    int x=0;
    while(massive[x]!='\0')
    {
        cout<<massive[x];
        x++;
    }
}
 
void inshow(char *massive)
{
  // Доп. проверка на случай неполного заполнения массива, помогает избежать перекоса.
    int y=0;
    while(massive[y])
        y++;
 
    for(int x=y;x>=0;x--)
        cout<<massive[x];
}
Немного самопал, но вроде работает)
спасибо, но мне обязательно нужно используя функцию с переменным числом параметров....
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
05.01.2013, 01:49 #7
TheVlad, если подождешь, то сейчас скину другой вариант.
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
05.01.2013, 01:58  [ТС] #8
Цитата Сообщение от Pakisan Посмотреть сообщение
TheVlad, если подождешь, то сейчас скину другой вариант.
я не тороплюсь =))
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
05.01.2013, 03:00 #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
33
34
35
36
37
38
39
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
 
char *massive;
 
void nm();
void sm();
 
void main()
{
    nm();
    sm();
    delete [] massive;
    system("pause");
}
 
void nm()
{
    int l;
    cout<<"Please choose massive's size. Remember size+1 simbol for 'end'\n";
    cin>>l;
    massive=new char[l];
    cin.clear();
    cin.sync();
}
 
void sm()
{
    cout << "Massive is: ";
    gets(massive);
    int x=0;
    while(massive[x])
        x++;
    for(int z=x;z>=0;--z)
        cout<<massive[z];
    cout<<"\n";
}
Эдакий зомби, без проверок, но работает.
Если это то, то причешу и скину финальный.
P.S. массив динамичный, использовал new и delete, это устраивает?
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
05.01.2013, 03:58  [ТС] #10
Цитата Сообщение от Pakisan Посмотреть сообщение
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
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
 
char *massive;
 
void nm();
void sm();
 
void main()
{
    nm();
    sm();
    delete [] massive;
    system("pause");
}
 
void nm()
{
    int l;
    cout<<"Please choose massive's size. Remember size+1 simbol for 'end'\n";
    cin>>l;
    massive=new char[l];
    cin.clear();
    cin.sync();
}
 
void sm()
{
    cout << "Massive is: ";
    gets(massive);
    int x=0;
    while(massive[x])
        x++;
    for(int z=x;z>=0;--z)
        cout<<massive[z];
    cout<<"\n";
}
Эдакий зомби, без проверок, но работает.
Если это то, то причешу и скину финальный.
P.S. массив динамичный, использовал new и delete, это устраивает?
ну спасибо=) это что то подходящее, правда если бы еще там функции были что то типа этой void fucn(size_t n, ...)... но всеравно спасибо, только если можеш подправить немного, ато оно работает но плюс до всего какие то ошибки выдает....
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
05.01.2013, 04:49 #11
TheVlad, оке, но не ошибки а предупреждения с рекомендацией отказаться от gets в пользу gets_s(насколько помню)

Добавлено через 46 минут
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
#include <iostream>
#include <cstdlib>
using namespace std;
 
char *massive;
int size;
 
void massiveatwork(int size, char *massive);
void checkmassive(char *massive);
void showmassive(char *massive);
 
void main()
{
    cin>>size; // вводим размер массива
    massiveatwork(size, massive);
    delete [] massive; // Удаляем массив
    system("pause");
}
 
void massiveatwork(int size, char *massive)
{
    massive = new char [size]; // Создаем массив
    cin.clear();cin.sync(); // Очищаем входящий поток, без этого функцию gets(massive) пропускает(?!?)
    cout<<"Write in massive, than push enter: ";
    gets(massive); // Заполняем массив.
    checkmassive(massive);
}
 
// Проверка на выход за пределы массива
void checkmassive(char *massive)
{
    int x=0,y=0;
    while(massive[x])
        x++;
    if(x>size)
    {
        cout<<"Out of massive:\n Please rewrite massive\n";
        while(massive[y])
        {
            massive[y]='\0';
            y++;
        }
        return massiveatwork(size, massive);
    }
    else
        showmassive(massive);
}
 
void showmassive(char *massive)
{
    int x=0;
    while(massive[x])
        x++;
    cout<<"Before inversion: "<<massive<<'\n'<<"After: ";
    for(int y=x;y>=0;--y)
        cout<<massive[y];
    cout<<'\n';
}
Вот, перед сном поправил, вроде проблем быть не должно...
Реализовал:
1)Проверку на выход за пределы массива с возможностью переписать содержимое
2)Функция(надеюсь нужного тебе вида)
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
05.01.2013, 08:12 #12

Не по теме:

Pakisan, зачем Вы все это пишете? В задании ясно сказано, что необходимо использовать функции с переменным числом параметров, что и было продемонстрировано в посте #4. Ваши решения исходному требованию не соответствуют.



Добавлено через 41 минуту
TheVlad, попробуйте такой вариант по первому пункту.
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
#include <stdarg.h>
#include <stdio.h>
 
/* Функция формирует массив, состоящий из строк, переданных в качестве
 * аргументов. Порядок строк в массиве - обратный исходному.
 *
 * out - выходной параметр. Массив строк, в который будут сохранены аргументы
 *     в обратном порядке.
 *
 * n - количество параметров.
 */
void inverse(char** out, size_t n, ...)
{
    va_list vl;
    va_start(vl, n);
 
    while (n--)
    {
        out[n] = va_arg(vl, char*);
    }
 
    va_end(vl);
}
 
int main()
{
    const int N = 100;
    char* buf[N];
 
    const int args = 3;
    inverse(buf, args, "foo", "bar", "baz");
 
    int i;
    for (i = 0; i < args; ++i)
    {
        printf("%s\n", buf[i]);
    }
    
    return 0;
}
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
06.01.2013, 16:03  [ТС] #13
Цитата Сообщение от 0x10 Посмотреть сообщение

Не по теме:

Pakisan, зачем Вы все это пишете? В задании ясно сказано, что необходимо использовать функции с переменным числом параметров, что и было продемонстрировано в посте #4. Ваши решения исходному требованию не соответствуют.



Добавлено через 41 минуту
TheVlad, попробуйте такой вариант по первому пункту.
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
#include <stdarg.h>
#include <stdio.h>
 
/* Функция формирует массив, состоящий из строк, переданных в качестве
 * аргументов. Порядок строк в массиве - обратный исходному.
 *
 * out - выходной параметр. Массив строк, в который будут сохранены аргументы
 *     в обратном порядке.
 *
 * n - количество параметров.
 */
void inverse(char** out, size_t n, ...)
{
    va_list vl;
    va_start(vl, n);
 
    while (n--)
    {
        out[n] = va_arg(vl, char*);
    }
 
    va_end(vl);
}
 
int main()
{
    const int N = 100;
    char* buf[N];
 
    const int args = 3;
    inverse(buf, args, "foo", "bar", "baz");
 
    int i;
    for (i = 0; i < args; ++i)
    {
        printf("%s\n", buf[i]);
    }
    
    return 0;
}
ну это больше подходит, только мне бы как то реализовать что бы самому вводить слова...
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
06.01.2013, 16:28 #14
В чем конкретно проблема с вводом данных?
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
06.01.2013, 16:32  [ТС] #15
Цитата Сообщение от 0x10 Посмотреть сообщение
В чем конкретно проблема с вводом данных?
ну слова заранее введены в коде программы, а мне надо что бы самому вводить в диалоговом окне , ну и тамже выбирать количество слов...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2013, 16:32
Привет! Вот еще темы с ответами:

Функции с переменным числом параметров - C++
Прошу помочь знатоков С++ в решении задачи, т.к. только начал изучать данный язык. Решить задачу, используя функции с переменным...

Функция с переменным числом параметров - C++
В функцию с переменным числом параметров поступают символы, конец списка - ноль-символ '\ 0'. Найти и вывести символ чаще всего...

Функции с переменным числом параметров - C++
Подскажите как работают функции с переменным числом параметров, как их составлять. Почитал немного в инете про это, кажется только больше...

Функции с переменным числом параметров - C++
помогите доработать пожалуйсто Написать функцию kvadr с переменным числом параметров, которая определяет количество чисел,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.01.2013, 16:32
Ответ Создать тему
Опции темы

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