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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2016, 03:02   #1
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию Одномерный массив ( Си )

Условие следующее: все элементы массива, которые не входят в заданный интервал обнуляются, остальные - возводятся в квадрат. Так вот, никак не могу понять, почему мой цикл так криво идет, при обнаружении элемента схожего с интервалом, и возведением его в квадрат.Пример ввода, n = 8,
массив : -1 2 3 -5 6 9 10 -7, интервал: 3 9 , выводит все верно, кроме элемента под индексом 2, вместо 9 выдает 81, потому что в самом начале, как я обнаружила, он непонятным мне образом снова берет элемент с индексом 2 и возводит в квадрат, который уже возведен ( = 9). Подскажите , пожалуйста, где я не вижу свою ошибку?
Код:
/* lab 10*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define OK 0
#define EMPTY_MASS -2
#define ERROR -1
#define N 10
int read_arr(int* mas, int* n, int* start, int* end);
void change_arr(int* mas, int n, int start, int end);

int read_arr(int* mas, int* n, int* start, int* end)
{
    int i;
    printf("\n Input n =");
    scanf("%d", n);
    if (*n == 0)
        return EMPTY_MASS;
    if (*n < 0)
        return ERROR;
    printf("\n Input elements of array: \n");
    for (i = 0; i < *n; i++)
    {
        printf("\n mas[%d] = ", i);
        scanf("%d", &mas[i]);
    }
    printf("\n Enter the interval: \n");
    scanf("%d %d", start, end);
    return OK;
}
void change_arr(int* mas, int n, int start, int end)
{
    int i, j, k = 0, col = 0;
    int nul = 0, col_null = 0;
    int max;
    int mas_int[N], mas_sqr[N];

    for (i = 0; i < (end - start) + 1; i++)
        mas_int[i] = start + i;
    for (i = 0; i < (end - start) + 1; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (mas_int[i] == mas[j])
            {
                mas[j] = mas[j]* mas[j];
                mas_sqr[k] = mas[j];
                k++;
                col++;
            }
        }
    }
    k = 0;
    for (i = 0; i < n; i++)
    {
        while (k < col-1)
        {
            if (mas_sqr[k] != mas[i])
            {
                k++;
                nul++;
            }
            else k++;
        }
        if (nul == 3)
        {
            mas[i] = 0;
            col_null++;
        }
        nul = 0;
        k = 0;
    }
    max = mas[0];
    printf("\n mas[%d] = %d", 0, mas[0]);
    for (i = 1; i < n; i++)
    {
        if (mas[i] > max)
            max = mas[i];
        printf("\n mas[%d] = %d", i, mas[i]);
    }
    printf("\n Maxim element of array = %d", max);
    printf("\n Amount null elements array = %d", col_null);
}
int main()
{
    int mas[N];
    int n, start, end;

    switch (read_arr(mas, &n, &start, &end))
    {
    case EMPTY_MASS:
        printf("\n This array empty! \n");
        break;
    case ERROR:
        printf("\n n can't < 0! \n");
        break;
    case OK:
        printf("\n Repeating elements of array: \n");
        change_arr(mas, n, start, end);
    }
    _getch();
}
zaira001002 вне форума Ответить с цитированием
Старый 16.11.2016, 07:29   #2
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Возможно я не так понял.

Но если суть сводится к тому что-бы найти все чиста в между 3-9 включительно,
и возвести во вторую ?

То вот так, можно.


PHP код:
// n = 8;
// mas = [-1, 2, 3, -5, 6, 9, 10, -7];
// 3-9

int main() {

    
int mas[10] = {
        -
123, -56910, -7
    
};

    
int n=8start=3end=9i=0;

    for (
i=0Ni++) {

        if ( 
mas] >= start && mas] <= end ) {
            
printf("mas[%d] => %d | changed => ( %d^2 == %d)\n"imas[i], mas[i], mas[i]*2  );
            
mas] *= 2;
        } else {
            
printf("mas[%d] => %d\n"imas[i] );

        }

    }


<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 16.11.2016, 12:22   #3
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

У вас код делает что-то очень непонятное.

Что такое mas_int, например?

А так, можно сделать то же, что и у pompiduskus, только у него там косяк: вместо возведения в квадрат он умножает на два.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
Найти одномерный массив элементы которого равны минимальным значениям в строках исходной матрицы и одномерный массив элементы... Richik123 Microsoft Office Excel 1 16.10.2013 15:45
Двумерный массив развернуть в одномерный массив по строкам[QBASIC] TrueStyle777 Помощь студентам 3 29.05.2013 21:56
Дан одномерный массив, сформировать новый массив по заданному правилу {Delphi} Nickolai47 Помощь студентам 5 16.12.2012 14:51
Одномерный массив. Q basic - Построить новый массив из элементов исходного ,которые больше P. Marishkaa Помощь студентам 2 12.01.2010 16:54