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

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

Войти
Регистрация
Восстановить пароль
 
I{Ro}{@
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 5
#1

матрицы, string const, функции с перем. кол. параметров. Немного завис... - C++

01.06.2011, 00:02. Просмотров 552. Ответов 4
Метки нет (Все метки)

Прошу извинить заранее за кривой код, язык начал учить 2 дня назад...

Ввести стринговую константу. Превратить её в трёхдиагональную матрицу матрицю (присвоить нули соотв. элементам). Транспонировать матрицу отн. средины (строка). Конкатенировать две строки полученной матрицы.
Я не очень понял условие, буду благодарен за помощь...


Написать функцию sum с переменным числом параметров, которая находит сумму заданных обычных дробей. main, обращается к sum не менее трёх раз с количеством параметров 5, 10, 12.
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
#include <iostream.h> //працює з помилкою (див. комент.)
#include <stdarg.h>
 
int nod(int p, int k);
double summ(int x,...);
 
int main()
{
    int n;
    
    n=summ(1,2, 3,4);
    cout<<"сума: "<<n;
 
    cin>>n;
    return (0);
}
 
int nod(int p, int k)
{
    int nodi;
     if (p!=0) nodi = nod(k % p, p);
     else nodi = k;
    return nodi;
}
 
double summ(int x,...)
{
    int i, sumx=0, sumy=0;
    int t1,t2,t;
    va_list uk_arg;
    va_start(uk_arg,x); /* показник на перший парам. */
    if (x!=-1) { 
        sumx=x; 
        sumy=va_arg(uk_arg,int);
    }
    else return (0);
    while ( (i=va_arg(uk_arg,int))!=-1) 
    /*здесь ошибка при проверке (всегда проходит и вылетает) :(*/
    { 
        t1=i; 
        t2=va_arg(uk_arg,int);
        t=nod(sumy,t2);
        sumx=sumx*(t/sumy)+t1*(t/t2);
        sumy=t;
    }
    va_end(uk_arg);
    return ((float) sumx/sumy);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 00:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос матрицы, string const, функции с перем. кол. параметров. Немного завис... (C++):

Как принять в функции main неопределенное кол-во параметров? - C++
Добрый день) Нужно что бы функция main принимала от одного до трех параметров в виде маcсива значений { 0x1d ,0x72, 0x01} Вызов...

Модификатор const для параметра функции не const? - C++
void foo(const int N) { int Arr; //&lt;-- ??? } В clang это работает. В VisualStudio 2015 нет.

const& и const* в имени функции - C++
Объясните пожалуйста что значит const&amp; и const* в имени и параметрах функции(пример из Вандевурд,Джосаттис): template &lt;typename T&gt; ...

запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’ - C++
private: std::string firstName; }; std::string ClientData::getFirstName() const{ return firstName; } Дает в итоге...

Реализация функции char *padl(const char *string, int len, int c=' ') - C++
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо удалением лишних символов слева , либо...

int const * const foo(const int* param) const - разъясните значение квалификаторов - C++
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ? 2: делает содержимое массива или...

4
NоName
3 / 3 / 0
Регистрация: 31.05.2011
Сообщений: 10
01.06.2011, 00:15 #2
Цитата Сообщение от I{Ro}{@ Посмотреть сообщение
C++
1
    /*здесь ошибка при проверке (всегда проходит и вылетает) :(*/
Ну так ничего удивительного, при вызове последним параметром надо передать -1:

C++
1
n=summ(1,2, 3,4, -1);
0
I{Ro}{@
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 5
01.06.2011, 00:30  [ТС] #3
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
#include <iostream.h> //працює з помилкою (див. комент.)
#include <stdarg.h>
int s1=0, s2=0;
int nod(int p, int k);
void summ(int x,...);
 
int main()
{
    int n;
    
    summ(1,2, 3,4,   -1); //тут можна писати будь-яку кільк. дробів (наразі 2, але можна 5,10,12) - в кынцы обов'язково -1 (потрібно для перевірки)
    cout<<"summ: "<<s1<<"/"<<s2;
 
    cin>>n;
    return (0);
}
 
int nod(int p, int k)
{
    int nodi;
     if (p!=0) nodi = nod(k % p, p);
     else nodi = k;
    return nodi;
}
 
void summ(int x,...)
{
    int i, sumx=0, sumy=0;
    int t1,t2,t;
    va_list uk_arg;
    va_start(uk_arg,x); /* показник на перший парам. */
    if (x!=-1) { /* перевірка на пустоту */
        sumx=x;
        sumy=va_arg(uk_arg,int);
    }
    while ( (i=va_arg(uk_arg,int))!=-1)
    {
        t1=i;
        t2=va_arg(uk_arg,int);
        t=nod(sumy,t2);
        sumx=sumx*(t/sumy)+t1*(t/t2);
        sumy=t;
    }
    va_end(uk_arg);
    s1=sumx; s2=sumy;
}
Вроде бы исправил, но сумму считает неправильно(

А идей по поводу первой задачи нету? Я не очень представляю как матрицу создать...
0
NоName
3 / 3 / 0
Регистрация: 31.05.2011
Сообщений: 10
01.06.2011, 00:44 #4
Считает неправильно - вроде надо искать не НОД, а НОК?
А у первой я условие не понял
0
I{Ro}{@
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 5
01.06.2011, 01:31  [ТС] #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
#include <iostream.h> 
#include <stdarg.h>
#include <stdlib.h>
 
int s1=0, s2=0;
int nod(int a, int b);
int nok(int a,int b);
void summ(int x,...);
 
int main()
{
    int n;
 
    summ(5, 1,2, 3,4, 1,2, 3,4, 5,6); //тут можна писати будь-яку кільк. дробів (наразі 5, але можна 10,12) - на початку кількість дробів.
    cout<<"summ: "<<s1<<"/"<<s2;
 
    system("pause");
 
    return (0);
}
 
int nok(int a,int b)
{
    return (a*b)/nod(a,b);
}
 
int nod(int a,int b)
 {
    while(a!=0 && b!=0)
    {
       if(a>=b) a=a%b;
           else b=b%a;
    }
 return a+b;
 }
 
void summ(int x,...)
{
    int i, sumx=0, sumy=0;
    int t1,t2,t;
    va_list uk_arg;
    va_start(uk_arg, x); /* показник на кільк. */
    i=x-1;
    int arg = va_arg( uk_arg, int );            
    sumx+=arg;
    int arg1 = va_arg( uk_arg, int );            
    sumy+=arg1;
    for( int j = 0 ; j < i; j++ )
        {
                int arg = va_arg( uk_arg, int );            
        t1=arg;
        int arg1 = va_arg( uk_arg, int );
        t2=arg1;
        t=nok(sumy,t2);
        sumx=sumx*(t/sumy)+t1*(t/t2);
        sumy=t;
        }
    va_end(uk_arg);
    t=nod(sumx, sumy);
    s1=sumx/t; s2=sumy/t;
}
Спасибо за помощь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 01:31
Привет! Вот еще темы с ответами:

Из string в const char - C++
Доброе время суток! Вопрос мягко говоря из букваря, но сижу туплю уже минут 20! Есть функция которая принимает const char, у меня...

Warning на const string - C++
Добрый день! Не подскажите, из-за чего выскакивает варнинг? Код: const string sph = &quot;Sphere&quot;; Ошибка: ...

(const string &) - C++
Есть класс class Someclass { public: Someclass( const string &amp;one ) { cout &lt;&lt; one; } };

Сравнение char* и const string - C++
Решаю небольшую и стандартную задачу с бинарными деревьями и столкнулся с проблемой на этапе ввода данных. Нужно считать из файла строки,...


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

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

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