Консультация № 184118
30.09.2011, 08:40
0.00 руб.
0 9 2
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Const N=40;
Var X:Array[l..N] of Integer;
T:Boolean;

Переменной Т присвоить значение True, если в массиве X нет нулевых элементов и при этом положительные элементы чере-дуются с отрицательными, и значение False иначе.
для нее нужно:
• разработанную схему алгоритма либо структурограмму;
• программу на языке программирования C#
• результаты тестирования программы.

Обсуждение

Неизвестный
30.09.2011, 09:54
общий
это ответ
Здравствуйте, Иванов Евгений Александрович!
высылаю только программку, остальное не помню как рисовать
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static private bool T;
static void Main(string[] args)
{
const int N = 40;
Array intarr= Array.CreateInstance(typeof(int),40);
intarr.SetValue(-1, 0);
intarr.SetValue(1, 1);
intarr.SetValue(-2, 2);
intarr.SetValue(12, 3);
intarr.SetValue(-1, 4);
intarr.SetValue(8, 5);
intarr.SetValue(-11, 6);
intarr.SetValue(1, 7);
intarr.SetValue(-1, 8);
intarr.SetValue(1, 9);
intarr.SetValue(-1, 10);
intarr.SetValue(5, 11);
intarr.SetValue(-1, 12);
intarr.SetValue(1, 13);
intarr.SetValue(-1, 14);
intarr.SetValue(1, 15);
intarr.SetValue(-1, 16);
intarr.SetValue(1, 17);
intarr.SetValue(-1, 18);
intarr.SetValue(5, 19);
intarr.SetValue(-12, 20);
intarr.SetValue(1, 21);
intarr.SetValue(-8, 22);
intarr.SetValue(11, 23);
intarr.SetValue(-1, 24);
intarr.SetValue(1, 25);
intarr.SetValue(-1, 26);
intarr.SetValue(1, 27);
intarr.SetValue(-5, 28);
intarr.SetValue(1, 29);
intarr.SetValue(-1, 30);
intarr.SetValue(1, 31);
intarr.SetValue(-1, 32);
intarr.SetValue(1, 33);
intarr.SetValue(-2, 34);
intarr.SetValue(12, 35);
intarr.SetValue(-1, 36);
intarr.SetValue(8, 37);
intarr.SetValue(-11, 38);
intarr.SetValue(1, 39);

proc(intarr);

Console.WriteLine("Проверка закончена");
Console.Read();
}
static void proc(Array intArr)
{
int d=0;
bool f = true; //первое число
foreach(int i in intArr) //перебор массива
{
if(i==0) //проверка на 0
{
T = false;
Console.WriteLine("T = false, значение 0");
return;
}
if (f == true)
{
d = i;
f = false;
}
else
{
if((d>0 && i>0)||(d<0 && i<0)) // проверка на чередование пол. с отр.
{
T = false;
Console.WriteLine("T = false , значения не чередуются предыдущее {0} текущее {1}",d.ToString(),i.ToString());
return;
}
}
d = i;
}
T = true;
Console.WriteLine("T = true");

}
}
}
Неизвестный
30.09.2011, 11:56
общий
а вот вопрос почему не могут ни разу использоваться ни N ни T 'это 10 и 13 строка
Неизвестный
30.09.2011, 12:09
общий
мой ляпик не исправил
Array intarr= Array.CreateInstance(typeof(int),40);
заменить
Array intarr= Array.CreateInstance(typeof(int),N);

а Т используется всегда ей присваивается true или false
Неизвестный
30.09.2011, 14:19
общий
чё то она ничего не вычисляет в ходе отладки
Неизвестный
30.09.2011, 14:25
общий
Она не чего не должна вычислять судя по заданию. Идет проверка массива если в массиве есть 0 то Т=false и проверка прекращается , также возвращается false если нет чередования отр. значение следующее пол. значение , если все нормально то Т=true. Все как в задании.
Неизвестный
30.09.2011, 14:28
общий
для проверки замените intarr.SetValue(-1, 8); на intarr.SetValue(0, 8); будет проверка на 0, замените intarr.SetValue(-1, 8); на intarr.SetValue(5, 8); будет проверка на чередование в этих случаях Т=false
Неизвестный
30.09.2011, 14:31
общий
а можно сделать чтобы этот перебор чисел отображался на экране в режиме отладки?
Неизвестный
30.09.2011, 14:37
общий
измените
65. foreach(int i in intArr) //перебор массива
66. {
67. Console.WriteLine(i.ToString());
Неизвестный
30.09.2011, 18:53
общий
это ответ
Здравствуйте, Иванов Евгений Александрович!
Код:
using System;

namespace Application
{
class ArrayTest
{
/// <summary>
/// К-во элементов по условию
/// </summary>
private const int Count = 40;

public static void Main (string[] args)
{
try {
// Тестируем со случайным генератором
TestGenerator (GenRandomArray);
// Тестируем "хороший" генератор
TestGenerator (GenGoodArray);
} catch (Exception ex) {
Console.WriteLine (ex.Message);
} finally {
Console.ReadKey ();
}
}

/// <summary>
/// Делегат для функции генерации массива
/// </summary>
private delegate void GenFunction (int[] array);

/// <summary>
/// Тестирует генератор массива
/// </summary>
/// <param name="genFunction">
/// A <see cref="GenFunction"/>
/// Функция заполняющая передаваемый массив
/// </param>
private static void TestGenerator (GenFunction genFunction)
{
// Создание массива
int[] array = new int[Count];
// Заполняем элементами
genFunction (array);
// Выводим на экран
Console.WriteLine ("Массив: ");
Array.ForEach (array, item => { Console.Write ("{0} ", item); });
Console.WriteLine ();
// Выводим результат проверки
Console.WriteLine ("Результат проверки: {0}\n", TestArray (array));
}

/// <summary>
/// Генератор случайных чисел
/// </summary>
static Random random = new Random ();
/// <summary>
/// Ограничение для генерируемых чисел
/// </summary>
const int Max = 10;

/// <summary>
/// Заполняет массив случайными элементами в диапазоне -Max..Max
/// </summary>
/// <param name="array">
/// A <see cref="System.Int32[]"/>
/// Заполняемый массив
/// </param>
private static void GenRandomArray (int[] array)
{
if (array == null) {
throw new ArgumentNullException ();
}
for (int i = 0; i < array.Length; ++i) {
array[i] = random.Next (-Max, Max);
}
}

/// <summary>
/// Заполняет массив случайными элементами в диапазоне -Max..Max таким образом,
/// что результат проверки заранее даст True
/// </summary>
/// <param name="array">
/// A <see cref="System.Int32[]"/>
/// Заполняемый массив
/// </param>
private static void GenGoodArray (int[] array)
{
if (array == null) {
throw new ArgumentNullException ();
}
int sign = random.Next (2) != 0 ? 1 : -1;
for (int i = 0; i < array.Length; ++i) {
array[i] = sign * (random.Next (Max - 1) + 1);
sign *= -1;
}
}

/// <summary>
/// Функция тестирования массива по условию.
/// Возвращает True если в массиве нет нулевых элементов и знак элементов чередуется.
/// В противном случае - False.
/// </summary>
/// <param name="array">
/// A <see cref="System.Int32[]"/>
/// Тестируемый массив
/// </param>
/// <returns>
/// A <see cref="System.Boolean"/>
/// </returns>
private static bool TestArray (int[] array)
{
if (array == null) {
throw new ArgumentNullException ();
}
// Знак предыдущего элемента
int lastSign = 0;
return Array.TrueForAll (array, item =>
{
// Знак элемента
int oldSign = lastSign;
lastSign = Math.Sign (item);
// Проверка по условию
return item != 0 && oldSign != lastSign;
});
}
}
}

Пример работы:
Код:
Массив: 
3 9 5 3 -4 5 8 8 0 1 8 -7 -1 5 9 6 -2 -9 -6 -6 8 1 8 -6 3 -2 -9 -7 9 3 -4 -2 9 -1 3 2 2 2 -5 -2
Результат проверки: False

Массив:
6 -7 8 -2 5 -4 5 -8 2 -4 1 -7 4 -6 3 -1 3 -9 7 -2 3 -6 1 -8 3 -4 7 -6 5 -5 8 -2 1 -8 8 -8 6 -6 4 -4
Результат проверки: True
Форма ответа