1 Востаннє редагувалося Skyzerks Synx (12.11.2014 21:57:35)

Тема: Проблема з прототипом функціії в С++

Ось код

#include "stdafx.h"
#include <iostream>
using namespace std;
#define max 20
#pragma warning(disable: 4996)
#include <time.h>
#include <stdlib.h>
void gen(int k, float *pp); //прототип функции массива
void out(int k, ...); //прототип функции вывода массива

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
    int arr[max], n, a, *p; 
    float b;
    do
    {
        printf("\nВведите количество элеменнтов массива n (n<=20): ");
        scanf("%d", &n);
    }
    while(n>max); //проверка выхода за границы массива
    p=arr;
    printf("\nВведите значение начала числового диапазона [a,b) - a: ");
    scanf("%d", &a);
    printf("\nВведите значение конца числового диапазона [a,b) - b: ");
    scanf("%f", &b);
    gen(n,a,b,p);
    out(n,arr);
    cout<<'\n';
    system("pause");
    return 0;
}

//Описание функции генерации массива cлучаными
//вещественными числами на [a,b)
void gen(int k, int a, int b, float  x[max])
{
    int i;
    srand(time(NULL)*1000);
    //устанавливает начальную точку генерации случайных чисел
    for(i=0;i<k;i++)
        x[i]=(rand()*1.0/(RAND_MAX)*(b-a)+a);
    //функция генерации случайных числ на [a,b)
}

//Описание функции вывода массива в столбец
void out(int k, float x[max])
{
    int i;
    printf("\nВывод значений %d массива в столбец: \n", k);
    for(i=0;i<k;i++)
        printf("x[%i]= %f\n", i, x[i]);
}

Ну, власне, всі проблеми з 27 рядком, а саме:
https://pp.сайт-злодій/c620019/v620019617/1ffb0/ZjGNE0KVXVY.jpg

2

Re: Проблема з прототипом функціії в С++

Раджу поставити англійську або українську мову, якщо російської не розумієте.

3

Re: Проблема з прототипом функціії в С++

Кривий переклад - не "4 аргументів", а "4-й аргумент". Так ясно? float * != int *.

4 Востаннє редагувалося muroclav (12.11.2014 22:05:10)

Re: Проблема з прототипом функціії в С++

Подивіться на це

void gen(int k, int a, int b, float  x[max])

на це

gen(n,a,b,p);

і на помилку

Подякували: Skyzerks Synx1

5

Re: Проблема з прототипом функціії в С++

quez написав:

Раджу поставити англійську або українську мову, якщо російської не розумієте.

якщо замість

void out(int k, ....);

поставити

void out(int k, int a, int b, float x[max]);

ось таке ще випливе + до тих помилок
https://pp.сайт-злодій/c620019/v620019617/1ffbf/EGLGuTwh1j0.jpg

6

Re: Проблема з прототипом функціії в С++

koala написав:

Кривий переклад - не "4 аргументів", а "4-й аргумент". Так ясно? float * != int *.

Правильний там переклад: “function does not take 4 arguments”.
void gen(int k, float *pp);

Подякували: koala1

7

Re: Проблема з прототипом функціії в С++

quez написав:
koala написав:

Кривий переклад - не "4 аргументів", а "4-й аргумент". Так ясно? float * != int *.

Правильний там переклад: “function does not take 4 arguments”.
void gen(int k, float *pp);

А прототип я і не помітив... ну як можна бути таким неуважним? :)

8

Re: Проблема з прототипом функціії в С++

Skyzerks Synx написав:
quez написав:

Раджу поставити англійську або українську мову, якщо російської не розумієте.

якщо замість

void out(int k, ....);

поставити

void out(int k, int a, int b, float x[max]);

ось таке ще випливе + до тих помилок
https://pp.сайт-злодій/c620019/v620019617/1ffbf/EGLGuTwh1j0.jpg

До чотирьох умієте рахувати?
gen: Функция не принимает 4 аргументов.
Скільки ж аргументів вона приймає? (Підказка: дивитись у рядок №8).

9

Re: Проблема з прототипом функціії в С++

Переробив:

#include "stdafx.h"
#include <iostream>
using namespace std;
#define max 20
#pragma warning(disable: 4996)
#include <time.h>
#include <stdlib.h>
void gen(int k, int a, float b, int *pp); //прототип функции массива
void out(int k, int x[max]); //прототип функции вывода массива

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
    int arr[max], n, a, *p; 
    float b;
    do
    {
        printf("\nВведите количество элеменнтов массива n (n<=20): ");
        scanf("%d", &n);
    }
    while(n>max); //проверка выхода за границы массива
    p=arr;
    printf("\nВведите значение начала числового диапазона [a,b) - a: ");
    scanf("%d", &a);
    printf("\nВведите значение конца числового диапазона [a,b) - b: ");
    scanf("%f", &b);
    gen(n,a,b,p);
    out(n,arr);
    cout<<'\n';
    system("pause");
    return 0;
}

//Описание функции генерации массива cлучаными
//вещественными числами на [a,b)
void gen(int k, int a, float b, int  x[max])
{
    int i;
    srand(time(NULL)*1000);
    //устанавливает начальную точку генерации случайных чисел
    for(i=0;i<k;i++)
        x[i]=(rand()*1.0/(RAND_MAX)*(b-a)+a);
    //функция генерации случайных числ на [a,b)
}

//Описание функции вывода массива в столбец
void out(int k, int x[max])
{
    int i;
    printf("\nВывод значений %d массива в столбец: \n", k);
    for(i=0;i<k;i++)
        printf("x[%i]= %f\n", i, x[i]);
}

Ото позор мені, не там вліпив +2 аргументи  *FACEPALM*

https://pp.сайт-злодій/c620019/v620019617/1ffc7/qXk4vK8Th0Y.jpg
Вот тільки тепер все нулями робить.  *SCRATCH*

10 Востаннє редагувалося muroclav (12.11.2014 22:18:01)

Re: Проблема з прототипом функціії в С++

напевне згенеровані значення потрібно повернути в програму і вже їх предавати в out

11

Re: Проблема з прототипом функціії в С++

Можна спробувати написати правильні типи: x у вас масив int, а ви поводитесь з ним, як з float.

Подякували: koala, Skyzerks Synx2

12

Re: Проблема з прототипом функціії в С++

відредагував для перевірки:

void gen(int k, int a, float b, int  x[max])
{
    int i;
    srand(time(NULL)*1000);
    //устанавливает начальную точку генерации случайных чисел
    for(i=0;i<k;i++){
        x[i]=(rand()*1.0/(RAND_MAX)*(b-a)+a);
        cout<<x[i]<<'\n';
    }
    //функция генерации случайных числ на [a,b)
}

коректно генерує, але, я не можу розібратись що я упускаю в передачі до out  *SCRATCH*
https://pp.сайт-злодій/c620019/v620019617/1ffd8/hKfVzuPqm2I.jpg

13 Востаннє редагувалося Skyzerks Synx (12.11.2014 22:37:21)

Re: Проблема з прототипом функціії в С++

quez написав:

Можна спробувати написати правильні типи: x у вас масив int, а ви поводитесь з ним, як з float.

Вот воно що...

void out(int k, int x[max])
{
    int i;
    printf("\nВывод значений %d массива в столбец: \n", k);
    for(i=0;i<k;i++)
        printf("x[%i]= %d\n", i, x[i]);
}

%f треба було замінити на %d
одні і ті самі граблі, та що зі мною таке  *CRAZY*  :D  :D  *PARDON*

14

Re: Проблема з прототипом функціії в С++

http://ideone.com/33SHXL
printf("x[%i]= %f\n", z, x[z]);

15

Re: Проблема з прототипом функціії в С++

quez написав:

http://ideone.com/33SHXL
printf("x[%i]= %f\n", z, x[z]);

Коли ви написали про те що я поводжусь з ним як з float, я зразу згадав, що я замінив тільки типи даних, але %f при виведені не підкорегував.