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

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

Войти
Регистрация
Восстановить пароль
 
SashaPinsk
39 / 37 / 2
Регистрация: 27.12.2009
Сообщений: 73
#1

Командная строка. Безтиповой указатель. - C++

05.01.2010, 23:44. Просмотров 706. Ответов 5
Метки нет (Все метки)

Вот примерная прога которая должна запускаться на борланде. Вопрос в следующем можно ли написать эту ф-цию для среды Visual(проблема заключается в наращивании шага безтипового указателя) Заранее спасибо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//функция для нахождения среднего арифметического чисел типа float.
double arithmetic1(double k,...)
{
    void *p;
    double sum=0;
    p=(double*)&k;
    ((double*)p)+=1;
    for(int i=0; i<k; i++)
    {
        sum+=*(double*)p;
        (double*)p+=1;
    }
    return sum/k;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2010, 23:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Командная строка. Безтиповой указатель. (C++):

командная строка - C++
вот такой вопрос: можно ли получить в переменную то, что выводится в командной строке? например, если я выполню...

Командная строка - C++
Допустим мне нужно информацию команды system(&quot;wmic diskdrive get model&quot;) вывести в memo. c++ Как это сделать?

Командная строка - C++
как сделать вывод сообщений на русском языке(англ.) в командной строке? Почему ошибка в объявлении вещественного типа и как запустить прогу...

Командная строка - C++
Помогите пожалуйста с программой. Объясните, как работать с командной строкой через с++? Задание таково: - В командной строке задаются...

Командная строка - C++
Почему при запуске скомпилированой программы, вместо русских букв у меня какая то ересь?

Командная строка - C++
Я скомпилировал исходный код в exe, а когда запускаю этот exe командная строка сразу закрывается (я даже не успеваю посмотреть что там...

5
Андрейка
420 / 224 / 27
Регистрация: 25.03.2009
Сообщений: 744
05.01.2010, 23:52 #2
SashaPinsk, а вам не кажется тут много не нужного ? создавать указатель void потом преобразовывать в double потом смещать по памяти..
0
easybudda
Модератор
Эксперт CЭксперт С++
9695 / 5645 / 963
Регистрация: 25.07.2009
Сообщений: 10,850
06.01.2010, 15:37 #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
#include <stdio.h>
#include <stdlib.h>
    
double average(double *arr, size_t count){
    double avg = 0.0;
    size_t i;
    
    for ( i = 0; i < count; ++i )
        avg += arr[i];
    
    return avg / (double)count;
}
 
int main(int argc, char** argv){
    size_t i, count;
    double *arr;
    
    if ( argc < 2 ){
        printf("Usage: %s doubleval1 doubleval2 doubleval3...\n", argv[0]);
        exit(0);
    }
    
    count = argc - 1;
    ++argv;
    if ( ( arr = (double*)calloc(count, sizeof(double)) ) == NULL ){
        perror("Bad memory!\n");
        exit(1);
    }
    for ( i = 0; i < count; ++i )
        arr[i] = atof(argv[i]);
    
    printf("Array: ");
    for ( i = 0; i < count; ++i )
        printf("%.1f ", arr[i]);
    printf("\nAverage value: %.1f\n", average(arr, count));
    
    return 0;
}
1
SashaPinsk
39 / 37 / 2
Регистрация: 27.12.2009
Сообщений: 73
10.01.2010, 10:51  [ТС] #4
Большое спасибо за то что уделили время этой проге(кстати вся соль и заключалась в работе с бестиповым указателем). Я её уже решил.
0
Evg
Эксперт CАвтор FAQ
18259 / 6384 / 440
Регистрация: 30.03.2009
Сообщений: 17,666
Записей в блоге: 28
10.01.2010, 11:18 #5
Андрейка, он не волшебник, он только учится


SashaPinsk, безтиповые указатели как правило используются только для хранения данных или передачи параметров. Напрямую незачем с ними работать. Т.е.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void *p;
double *dp;
...
/* Где-то сформировал p */
p = 
...
/* Далее этот указатель переписываем в другую переменную
 * нужного типа и работаем без плясок с бубнами */
dp = (double*) p;
for (int i=0; i<k; i++)
{
  sum += *dp;
  dp++;
}
Это по части работы с указателем void*

Что касается выковыривания параметров в процедуре с тремя точками, то у тебя в принципе сделан неправильный код. Для этих целей нужно использовать va_arg, потому как то, что у тебя написано, будет работать только на одной платформе (а иногда ещё и только на одном компиляторе), т.к. схема передачи параметров в процедуры на каждой платформе своя (в том числе параметры могут передаваться и на регистрах)
1
SashaPinsk
39 / 37 / 2
Регистрация: 27.12.2009
Сообщений: 73
25.01.2010, 13:08  [ТС] #6
Цитата Сообщение от Андрейка Посмотреть сообщение
SashaPinsk, а вам не кажется тут много не нужного ? создавать указатель void потом преобразовывать в double потом смещать по памяти..
Такое получил задание поэтому так и делал, а не ради личной забавы. Но я уже её давно написал, но спасибо за интерес.
0
25.01.2010, 13:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2010, 13:08
Привет! Вот еще темы с ответами:

C++ и командная строка - C++
Как с помощью с++ открыть ком. строку и ввести команды?

Командная строка. - C++
Сумма чисел. числа передаются в виде аргументов командной строки. #include &lt;iostream&gt; #include &lt;locale&gt; using namespace std; ...

Командная строка - C++
Здравствуйте. Возможна тема, подобная этой уже создавалась, в любом случае не нашел и, если что - прошу прощения. Суть проблемы...

Командная строка - C++
Нужно выполнить задание, но как не пойму... Ввести n строк , найти самую короткую и самую длинную строки. Вывести найденные строки и...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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