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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C]Дана последовательность чисел, за которой следу 
V
    Опции темы
Daremez
  Дата 16.1.2012, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дана последовательность чисел, за которой следует ноль. 
Найти сумму чисел, которые расположены до первого отрицательного значения, и после значения, равного пяти.
PM MAIL   Вверх
t_gran
Дата 17.1.2012, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>

//----------------------------------------------//
// Заполнение массива
void Fill(int* arr, size_t size)
{
   srand(time(0));

   size_t n = size;

   while (n--)
   {
      arr[n] = rand()%20 - 5;
   }
   
   // Гарантируем наличае 5-ки
   arr[rand()%size] = 5;
}
//----------------------------------------------//
// Вывод массива на экран
void Print(int* arr, size_t size)
{
   size_t i;
   
   for (i = 0; i < size; ++i)
   {
      printf("%d ", arr[i]);
   }
   
   printf("\n");
}
//----------------------------------------------//
bool IsFive(int digit)
{
   return (digit == 5);
}
//----------------------------------------------//
bool IsNegative(int digit)
{
   return (digit < 0);
}
//----------------------------------------------//
// Функция поиска значения, в качестве условия поиска выступает функция
int Find(int* arr, size_t size, bool (*func)(int))
{
   int index = -1;
   
   size_t i;
   
   for (i = 0; i < size; ++i)
   {
      if (func(arr[i]))
      {
         index = i;
         break;
      }
   }
   
   return index;
}
//----------------------------------------------//
// Вычисляет сумму элементов массива в заданном интервале
int GetSumm(int* arr, int begin, int end)
{
   int summ = 0;
   
   if ((begin >= 0) && (end >= 0))
   {
      while (begin < end)
      {
         summ += arr[begin++];
      }
   }
   return summ;
}
//----------------------------------------------//

int main()
{
   size_t n;
   printf("length: ");
   scanf("%u", &n);
   
   int* arr = malloc(sizeof(int) * n);
   
   Fill(arr, n);
   Print(arr, n);
   
   int summ = GetSumm(arr, 0, Find(arr, n, IsNegative)) +
              GetSumm(arr, Find(arr, n, IsFive)+1, n);

   printf("summ = %d\n", summ);

   free(arr);
   
   return 0;
}

user posted image

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  archive.7z 2,08 Kb


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
Daremez
Дата 17.1.2012, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile 
Код

error C2440: 'initializing' : cannot convert from 'void *' to 'int *' Conversion from 'void*' to pointer to non-'void' requires an explicit cast

PM MAIL   Вверх
t_gran
Дата 17.1.2012, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Daremez, почему строку с шибкой не написали? Я могу только догадываться, что мелкомягкий компилятор ругается на malloc, вернее сам не делает приведение типов. Нужно тогда написать следующее:
Код

   // ...
   // line 86
   int* arr = (int*) malloc(sizeof(int) * n);
   // ...



--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
Daremez
Дата 17.1.2012, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(t_gran @ 17.1.2012,  15:01)
Daremez, почему строку с шибкой не написали? Я могу только догадываться, что мелкомягкий компилятор ругается на malloc, вернее сам не делает приведение типов. Нужно тогда написать следующее:
Код

   // ...
   // line 86
   int* arr = (int*) malloc(sizeof(int) * n);
   // ...

Код

#include "stdafx.h"
#include <iostream>
#include <conio.h>

 
int main()
{
                int num;
                int sum = 0;
                bool f1 = false;
                bool f2 = false;
 
                do
                {
                                std::cin >> num;
                                if ( num == 5 )
                                {
                                        f1 = true;
                                        sum = -5;
                                }
                                else
                                        if ( num < 0 )
                                                f2 = true;
                                sum += f1 && !f2 ? num : 0;
                }
                while ( num != 0);
 
                std::cout << " Sum = " << sum << std::endl;
 getch();
                return 0;
}

 Мне вот такой код предложили "взамен".
Попробую и твой с поправкой..

Добавлено через 12 минут и 20 секунд
Код

// 7.sumzero_2.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>

//----------------------------------------------//
// Заполнение массива
void Fill(int* arr, size_t size)
{
   srand(time(0));

   size_t n = size;

   while (n--)
   {
     arr[n] = rand()%20 - 5;
   }
   
   // Гарантируем наличае 5-ки
   arr[rand()%size] = 5;
}
//----------------------------------------------//
// Вывод массива на экран
void Print(int* arr, size_t size)
{
   size_t i;
   
   for (i = 0; i < size; ++i)
   {
      printf("%d ", arr[i]);
   }
   
   printf("\n");
}
//----------------------------------------------//
bool IsFive(int digit)
{
   return (digit == 5);
}
//----------------------------------------------//
bool IsNegative(int digit)
{
   return (digit < 0);
}
//----------------------------------------------//
// Функция поиска значения, в качестве условия поиска выступает функция
int Find(int* arr, size_t size, bool (*func)(int))
{
   int index = -1;
   
   size_t i;
   
   for (i = 0; i < size; ++i)
   {
      if (func(arr[i]))
      {
         index = i;
         break;
      }
   }
   
   return index;
}
//----------------------------------------------//
// Вычисляет сумму элементов массива в заданном интервале
int GetSumm(int* arr, int begin, int end)
{
   int summ = 0;
   
   if ((begin >= 0) && (end >= 0))
   {
      while (begin < end)
      {
         summ += arr[begin++];
      }
   }
   return summ;
}
//----------------------------------------------//

int main()
{
   size_t n;
   printf("length: ");
   scanf("%u", &n);
   
   int* arr = (int*) malloc(sizeof(int) * n);
   
   Fill(arr, n);
   Print(arr, n);
   
   int summ = GetSumm(arr, 0, Find(arr, n, IsNegative)) +
              GetSumm(arr, Find(arr, n, IsFive)+1, n);

   printf("summ = %d\n", summ);

   free(arr);
   getch();
   return 0;
}

Вот так вроде нормально заработал!

t_gran, спасибо тебе! еще раз)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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