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

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

Восстановить пароль Регистрация
 
I{Ro}{@
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 5
01.06.2011, 00:02     матрицы, string const, функции с перем. кол. параметров. Немного завис... #1
Прошу извинить заранее за кривой код, язык начал учить 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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 00:02     матрицы, string const, функции с перем. кол. параметров. Немного завис...
Посмотрите здесь:

Ошибка при компиляции "Cannot convert `std::string' to `const char*" C++
Const после функции C++
C++ const& и const* в имени функции
(const string &) C++
В чём разница между возвратом "string" и "const string&" & C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NоName
3 / 3 / 0
Регистрация: 31.05.2011
Сообщений: 10
01.06.2011, 00:15     матрицы, string const, функции с перем. кол. параметров. Немного завис... #2
Цитата Сообщение от I{Ro}{@ Посмотреть сообщение
C++
1
    /*здесь ошибка при проверке (всегда проходит и вылетает) :(*/
Ну так ничего удивительного, при вызове последним параметром надо передать -1:

C++
1
n=summ(1,2, 3,4, -1);
I{Ro}{@
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 5
01.06.2011, 00:30  [ТС]     матрицы, string const, функции с перем. кол. параметров. Немного завис... #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;
}
Вроде бы исправил, но сумму считает неправильно(

А идей по поводу первой задачи нету? Я не очень представляю как матрицу создать...
NоName
3 / 3 / 0
Регистрация: 31.05.2011
Сообщений: 10
01.06.2011, 00:44     матрицы, string const, функции с перем. кол. параметров. Немного завис... #4
Считает неправильно - вроде надо искать не НОД, а НОК?
А у первой я условие не понял
I{Ro}{@
0 / 0 / 0
Регистрация: 29.11.2010
Сообщений: 5
01.06.2011, 01:31  [ТС]     матрицы, string const, функции с перем. кол. параметров. Немного завис... #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;
}
Спасибо за помощь.
Yandex
Объявления
01.06.2011, 01:31     матрицы, string const, функции с перем. кол. параметров. Немного завис...
Ответ Создать тему
Опции темы

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