Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2019, 14:24   #1
KiskaZeroOne
 
Регистрация: 04.07.2019
Сообщений: 3
По умолчанию [C] Помогите пофиксить ограничитель

Это мой код он должен вводить рандомный целочисленный массив, потом показывать самое большое число, и как раз в последнем где то как то ошибка с ограничением. То есть человек вводит максимум и минимум и числа из массива которые в него не попадают должны быть заменены на 0, ну и позже из получившегося массива надо взять общую сумму.
Есть идеи?


Код:
int main(void){
 int i,k,n,dn,maximum,minimum;
    double *arr,max,sum;
    
    printf("N: ");
    scanf("%d",&n);
    arr=(double*)calloc(n,sizeof(double));
    for(i=0; i<n; i++)
    {
        arr[i]=rand()%21-10;
        printf("%.2lf ",arr[i]);
      // printf("array[%d]=",i);
      //scanf("%lf",arr+i);
        if(!i) max=arr[i];
        else
            if(max<arr[i]) max=arr[i];
    }
    printf("\nmax=%.2lf\n",max);
    printf("minimum a potom maximum: ");
    scanf("%d%d",&minimum,&maximum);

    for(dn=i=0; i<n-dn; i++)
        if(fabs(arr[i])>=minimum && fabs(arr[i])<=maximum)
        {
            memmove(arr+i,arr+i+1,(n-i-1)*sizeof(double));
            i--;
            dn++;
        }
    for(i=n-dn; i<n; i++) arr[i]=0;
    for(k=n-1; k>=0; k--)
        if(arr[k]>0) break;
    sum=0;
    for(i=0; i<k; i++) sum+=arr[i];
    for(i=0; i<n; i++)
        printf("%.2lf ",arr[i]);
    printf("\nsum=%.2lf\n",sum);
    free(arr);
}
KiskaZeroOne вне форума Ответить с цитированием
Старый 04.07.2019, 14:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

или я чего-то не понимаю, или одно из двух...

зачем Вам memmove ?!

так не проще?
Код:
  sum=0;
  for(i=0; i<n; i++){
        if(fabs(arr[i])>=minimum && fabs(arr[i])<=maximum)
            sum += arr[i];
        else arr[i] = 0;
  }

ну и попутно.

Цитата:
Сообщение от KiskaZeroOne Посмотреть сообщение
вводить рандомный целочисленный массив
во-первых, где иницилизация ГПСЧ ?
во-вторых,
Цитата:
Сообщение от KiskaZeroOne Посмотреть сообщение
Код:
arr=(double*)calloc(n,sizeof(double));
уверены, что это именно целочисленный массив?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.07.2019, 15:27   #3
KiskaZeroOne
 
Регистрация: 04.07.2019
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
или я чего-то не понимаю, или одно из двух...

зачем Вам memmove ?!

так не проще?
Код:
  sum=0;
  for(i=0; i<n; i++){
        if(fabs(arr[i])>=minimum && fabs(arr[i])<=maximum)
            sum += arr[i];
        else arr[i] = 0;
  }

ну и попутно.


во-первых, где иницилизация ГПСЧ ?



во-вторых, уверены, что это именно целочисленный массив?
я исправила но так тоже не правильно выводит
Изображения
Тип файла: png жж.png (5.7 Кб, 23 просмотров)
KiskaZeroOne вне форума Ответить с цитированием
Старый 04.07.2019, 15:59   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от KiskaZeroOne Посмотреть сообщение
я исправила но так тоже не правильно выводит
у меня всё работает.

пруф
https://ideone.com/bPWz3e

код полностью
Код:
#include <stdio.h>

int main(void){
    int i,n,imax, maximum,minimum;
    int *arr,sum;
    
    printf("N: ");
    scanf("%d",&n);

    srand(time(NULL));
    arr=(int*)calloc(n,sizeof(int));
    imax=0;
    for(i=0; i<n; i++)
    {
        arr[i]=rand()%21-10;
        printf("%2d ",arr[i]);
      // printf("array[%d]=",i);
      //scanf("%lf",arr+i);
       if(arr[imax]<arr[i]) imax=i;
    }
    printf("\nmax=%2d\n",arr[imax]);
    printf("minimum a potom maximum: ");
    scanf("%d%d",&minimum,&maximum);

    sum=0;
    for(i=0; i<n; i++){
        if(fabs(arr[i])>=minimum && fabs(arr[i])<=maximum)
            sum += arr[i];
        else arr[i] = 0;
    }

    printf("Array after: \n");
    for(i=0; i<n; i++){
        printf("%2d ",arr[i]);
    }

    printf("\nsum=%4d\n",sum);
    free(arr);

    return 0;
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.07.2019, 16:04   #5
KiskaZeroOne
 
Регистрация: 04.07.2019
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
у меня всё работает.

пруф
https://ideone.com/bPWz3e

код полностью
Код:
#include <stdio.h>

int main(void){
    int i,n,imax, maximum,minimum;
    int *arr,sum;
    
    printf("N: ");
    scanf("%d",&n);

    srand(time(NULL));
    arr=(int*)calloc(n,sizeof(int));
    imax=0;
    for(i=0; i<n; i++)
    {
        arr[i]=rand()%21-10;
        printf("%2d ",arr[i]);
      // printf("array[%d]=",i);
      //scanf("%lf",arr+i);
       if(arr[imax]<arr[i]) imax=i;
    }
    printf("\nmax=%2d\n",arr[imax]);
    printf("minimum a potom maximum: ");
    scanf("%d%d",&minimum,&maximum);

    sum=0;
    for(i=0; i<n; i++){
        if(fabs(arr[i])>=minimum && fabs(arr[i])<=maximum)
            sum += arr[i];
        else arr[i] = 0;
    }

    printf("Array after: \n");
    for(i=0; i<n; i++){
        printf("%2d ",arr[i]);
    }

    printf("\nsum=%4d\n",sum);
    free(arr);

    return 0;
}
О БОЖЕ )))) ТОЧНО!!
спасибо!))
KiskaZeroOne вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пофиксить Woocommerce + Paypal Oly-oly Фриланс 0 10.02.2015 14:30
Помогите пофиксить запрос sql Matras Помощь студентам 5 17.01.2014 18:43
Пофиксить баги в php скрипте Cone PHP 0 02.09.2011 18:32
Ограничитель в быстрой сортировке Юлия999 Помощь студентам 1 08.06.2011 10:47
Автопарсер гугла, пофиксить баги gamer123 Общие вопросы Delphi 0 05.09.2010 20:55