Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция, подсчитывающая сумму элементов массива 
V
    Опции темы
suse
Дата 26.6.2008, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Помогите пожалуйста! Задачка на С.
Дан массив char s[]="12345". Нужно написать функцию, которая считает сумму элементов в массиве.
Сумму то я посчитал, а вот как написать функцию не знаю.
PM MAIL   Вверх
Lazin
Дата 26.6.2008, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Код

int sum_all(char* begin, char* end)
{
    int a = 0;
    for (char *p = begin; p != end; ++p)
        a += *p;
    return a;
}

int sum_all(char* array, size_t size)
{
    int a = 0;
    for (size_t i = 0; i != size; ++i)
        a += array[i];
    return a;
}
#include <iostream>
#include <numeric>
#include <functional>
char data[] = {
    1, 2, 3, 4, 5, 6, 7, 8, 9, 0
};

int main()
{
    //стандартный вариант
    int total = std::accumulate(data, data + sizeof(data)/sizeof(char), 0);
    std::cout << "good sum = " << total << std::endl;
    //велосипедный вариант
    total = sum_all(data, data + sizeof(data)/sizeof(char));
    std::cout << "not so good sum = " << total << std::endl;

    total = sum_all(data, sizeof(data)/sizeof(char));
    std::cout << "not so good sum = " << total << std::endl;
}

PM MAIL Skype GTalk   Вверх
suse
Дата 26.6.2008, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



Спасибо Lazin!    Мой старенький Borland 4.5 не хочет понимать #include <numeric> и #include <functional>...
PM MAIL   Вверх
mrbrooks
Дата 26.6.2008, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



хы. жестко  smile 
я попроще предложу.
Код

unsigned char str[]="12345";
int i = 0, res = 0;
while(str[i])
{
  res += str[i];
  i++;
}
printf ("summa = %d", res);

PM MAIL   Вверх
bsa
Дата 26.6.2008, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



suse, поставь хотя бы 5.5
PM   Вверх
mrbrooks
Дата 26.6.2008, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата

Спасибо Lazin!    Мой старенький Borland 4.5 не хочет понимать #include <numeric> и #include <functional>...


Вот о версии Бормана надо было сразу говорить имхо. 
PM MAIL   Вверх
suse
Дата 26.6.2008, 08:46 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 26.6.2008

Репутация: нет
Всего: нет



в том то и проблема, что нужно написать функцию.
Так было бы совсем просто...

Добавлено через 1 минуту и 55 секунд
Да про Borland нужно было предупредить. Но мне написали саму функцию, что определенно не может не радовать!
PM MAIL   Вверх
bsa
Дата 26.6.2008, 08:49 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(suse @ 26.6.2008,  08:46)
в том то и проблема, что нужно написать функцию.
Так было бы совсем просто...

Заверни этот код в функцию и будет тебе счастье:
Код
int my_func(const char *str)
{
   int result = 0;
   for(;*str; ++str)
       result += *str;
   return result;
}

PM   Вверх
susanin
Дата 29.6.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



mrbrooks, скомпилил твой проект и выводит он в ответе 255... мне кажется это неправильный ответ..=)
bsa, у вас аналогично.. но разве сумма 1+2+3+4+5=255????
я думаю что массив надо еще функцией перевести из char в int..а только потом складывать..

Это сообщение отредактировал(а) susanin - 29.6.2008, 10:47
PM MAIL   Вверх
susanin
Дата 29.6.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



не сильно думая решил вот так...
Код

#include <iostream>
using namespace std;

int main()
{
const char str[]="12345";
int i = 0, res = 0;
int mas;
mas=atoi(str);
while(mas>10)
{
  res += mas%10;
  mas/=10;
}
res+=mas;
cout<<"summa "<<res<<endl; 
}


Добавлено @ 11:05
аналогично но с функцией
Код

#include <iostream>
using namespace std;

int summa(const char*);
int main()
{
const char str[]="12345";
cout<<"summa "<<summa(str)<<endl; 
}
int summa(const char stroka[])
{
int i = 0, res = 0;
int mas;
mas=atoi(stroka);
while(mas>10)
{
  res += mas%10;
  mas/=10;
}
res+=mas;
return res;
}


Это сообщение отредактировал(а) susanin - 29.6.2008, 11:23
PM MAIL   Вверх
jonie
Дата 29.6.2008, 11:51 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



susanin слишком несильно.
просто взять надо вариант bsa. он верный, но он считает именно сумму элементов массива, а не сумму элементов массива, предпологая что это ANSI коды цифр.
для последнего случая вариант bsa будет такой :
Код

int my_func(const char *str)
{
   int result = 0;
   for(;*str; ++str)
       result += (*str - '0');
   return result;

}



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
CppDevelopeR
Дата 30.6.2008, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: нет
Всего: 9



Цитата(jonie @  29.6.2008,  11:51 Найти цитируемый пост)
сумму элементов массива, а не сумму элементов массива

 smile 


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.