Масив, найти вектор, обнаружение ошибки

Тема в разделе "Общие вопросы по С и С++", создана пользователем Andrey0707, 25 апр 2016.

  1. Andrey0707

    Andrey0707 New Member

    Регистрация:
    25 апр 2016
    Сообщения:
    3
    Симпатии:
    0
    Помогите пожалуйста, при компиляции в полученном масиве 0. Где ошибка?
    Вот условие:
    Даны натуральное число n и действительные числа y1 y2…yn. Получить вектор Z (Z1, Z2…Zn),
    Компонента Zi равняется:
    yi, если 0 < yi < 10;
    в противном случае 0 < Zi < 10;
    Решение получить в виде массивов.
    Код (C++):
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
    const int m=10;
    int main()
    {
    float Y[m];
    float Z[m];
     
    int i;
     
        for (i = 0; i< m; i++)
        Y[i] = rand() %15 -2;
     
    printf("Massiv: \n");
    for ( i = 0; i< m; i ++ )
    printf("%3.0f |", Y[i] );  
    printf ("\nPolukchenii masiv:\n");
    for(i=0;i <m;i++)
    {
    if(0<Y[i]<10)
    Y[i] = Z[i];   
    else
    Z[i] = 1;
    printf("%3.0f |", Z[i]);     
    }
    getch();
    }
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Так сравнивать нельзя. На мой взгляд, тут еще не известно какой оператор будет выполнен первым, до допустим, что они выполнятся слева направо. Пусть Y больше ноля.
    Тогда
    Код (C):
    0<Y[i]
    вернет true, а значит что следом ты выполнишь
    Код (C):
    true < 10
    При этом true будет преобразовано в единицу.

    Проблема в том, что если Y будет равно например 1000 - то выполнится 0 < 1000, а затем 1 < 10 и ты также получишь в результате true. Хотя, очевидно, что 1000 < 10 должно вернуть false.

    Это была первая ошибка. Вторая в том, что тебе надо сформировать z, но при каких-то условиях ты пытаешься формировать наоборот y:
    Код (C):
    Y[i] = Z[i];  
    Правильное решение:
    Код (C):
    if (0 < y[i] && y[i] < 10)
      z[i] = y[i];
    else
      z[i] = 1;
    Больше ляпов не заметил.
     
Загрузка...
Похожие Темы - Масив найти вектор
  1. Gartus
    Ответов:
    1
    Просмотров:
    805
  2. andriana
    Ответов:
    1
    Просмотров:
    1.201
  3. Jora
    Ответов:
    4
    Просмотров:
    1.498
  4. Вадим90
    Ответов:
    1
    Просмотров:
    1.231
  5. dimon131
    Ответов:
    6
    Просмотров:
    2.518

Поделиться этой страницей