• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

A

Andrey0707

Помогите пожалуйста, при компиляции в полученном масиве 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(); 
}
 
R

rrrFer

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

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

Это была первая ошибка. Вторая в том, что тебе надо сформировать z, но при каких-то условиях ты пытаешься формировать наоборот y:
Код:
Y[i] = Z[i];

Правильное решение:
Код:
if (0 < y[i] && y[i] < 10)
  z[i] = y[i];
else
  z[i] = 1;

Больше ляпов не заметил.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!