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

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

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

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

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

С#: "Масив в структурах"

  • Автор темы kurzon
  • Дата начала
K

kurzon

Условие:

Код:
Массив записей структура которого автор, год издания, упорядочить по году издания.
Я сделал ету программу, с двума масивами, а надо сделать с структурами(где два масива)?


Работоспособная программа.

Код:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication6
{
class Program
{
class Teenager
{
private static Random r = new Random();
private static int GetRamdomNumber(short upperLimit)
{ return r.Next(upperLimit); }
public static string Complain()
{
string[] messages = new string[6] { "Троесент!", "Ватсон!", "Фаронов!", "Шилд!", "Агуров!", "Глинський!" };
return messages[GetRamdomNumber(5)];
}
}
static void Main(string[] args)
{
int i, x, size = 10;
string y;
string[] b = new string[100];
int[] d = new int[100];
Console.WriteLine("Генерация масива");
Random a = new Random();
Random c = new Random();
for (i = 0; i < size; i++)
{
b[i] = Teenager.Complain();
d[i] = c.Next(2007);
Console.WriteLine("Название книги :" + b[i] + " Год : " + d[i]);
}
Console.ReadLine();

for (j = 0; j < size; j++)
{
for (i = 1; i < size; i++)
{
if (d[i - 1] > d[i])
{
x = d[i - 1];
d[i - 1] = d[i];
d[i] = x;
y = b[i - 1];
b[i - 1] = b[i];
b[i] = y;
}
}
}

Console.WriteLine("Cортованый масив");
for (i = 1; i < size; i++)
{
Console.WriteLine(" Название книги :" + b[i] + " Год : " + d[i]);
}
Console.ReadLine();
}
}
}

Вот я сам сделал, но ошибки ктото может исправить?

Код:
using System;
using System.Collections.Generic;
using System.Text;
namespace Struct
{

struct Books
{
public string[] autor;
public int[] god;
public Books(string[] a, int[] b)
{
autor=a;
god=b;
}
}
struct Teenager
{
private static Random r = new Random();
private static int GetRamdomNumber(short upperLimit)
{ return r.Next(upperLimit); }
public static string Complain()
{
string[] messages = new string[6] { "Троесент!", "Ватсон!", "Фаронов!", "Шилд!", "Агуров!", "Глинський!" };
return messages[GetRamdomNumber(5)];
}
}
class structions
{
public static void Main()
{
string[] a = new string[6];
int[] b;
int i,j,x, size=10;

Random c = new Random();
for (i = 0; i < size; i++)
{
a = Teenager.Complain();
b = c.Next(2007);
Books book = new Books(a, b);
Console.WriteLine("Название книги :" + book.autor[i] + " Год : " + book.god[i]);

}
Console.ReadLine();

for (j = 0; j < size; j++)
{
for (i = 1; i < size; i++)
{
if (book.autor[i - 1] > book.autor[i])
{
x = book.autor[i - 1];
book.autor[i - 1] = book.autor[i];
book.autor[i] = x;

}
}
}
Console.WriteLine("Cортованый масив");
for (i = 1; i < size; i++)
{
Console.WriteLine(" Название книги :" + book.autor[i] + " Год : " + book.god[i]);
}
Console.ReadLine();
}
}
}
 
K

kurzon

Я уже переделал, не работает?

Код:
using System;
using System.Collections.Generic;
using System.Text;

namespace Struct
{

struct Bookss
{
private string _author;  
public string Author 
{ get {return _author; } }  
private int _year;  
public int year;
public void book(string author, int year) 
{	  _author = author;	  _year = year;  }
}
struct Teenager
{
private static Random r = new Random();
private static int GetRamdomNumber(short upperLimit)
{ return r.Next(upperLimit); }
public static string Complain()
{
string[] messages = new string[6] { "Троесент!", "Ватсон!", "Фаронов!", "Шилд!", "Агуров!", "Глинський!" };
return messages[GetRamdomNumber(5)];
}
}
class structions
{
public static void Main()
{
string a;
int b;
int i,j,x, size=10;

Random c = new Random();

Bookss Books = new Bookss();

for (i = 0; i < size; i++)
{
a = Teenager.Complain();
b = c.Next(2007);
Books.Add(new book(a, b));
Console.WriteLine("Название книги :" + book.author[i] + " Год : " + book.year[i]);

}

Console.ReadLine();

for (j = 0; j < size; j++)
{
for (i = 1; i < size; i++)
{
if (book.year[i - 1] > book.year[i])
{
x = book.year[i - 1];
book.year[i - 1] = book.year[i];
book.year[i] = x;



}
}
}
Console.WriteLine("Cортованый масив");

for (i = 1; i < size; i++)
{
Console.WriteLine(" Название книги :" + book.author[i] + " Год : " + Books.year[i]);
}
Console.ReadLine();
}
}

}
Может ктото исправит ошыбки?
 
K

kurzon

Error 1 'Struct.Bookss' does not contain a definition for 'Add'
Error 2 The type or namespace name 'Books' could not be found (are you missing a using directive or an assembly reference?)
Error 3 'Struct.Bookss' does not contain a definition for 'author'
Error 4 Cannot apply indexing with [] to an expression of type 'int'
Error 5 The name 'book' does not exist in the current context
 
P

Pasha

Для: kurzon
Вчитайся внимательно в свой код. Ты усиллено пытаешься использовать один экземпляр структуры для хранения сразу всех объектов книг. Должен быть список книг(List<Bookss> наверное), в кторый ты будешь делать Add, и кторый потом будешь сортировать.
 
C

chm

kurzon, имхо в таких случаях датасеты использовать удобнее. Посмотрите в MSDN классы DataSet, DataTable, DataRow. Там хватает примеров по работе с датасетами.
 
P

Pasha

Для: chm
Это явно задача с условием "сделать через массив структур".
DataSet-ы, кстати, нужно постепенно искоренять. И переходить на linq. :)
 
Мы в соцсетях:

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