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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2008, 17:49   #1
Andres
 
Регистрация: 01.01.2008
Сообщений: 3
По умолчанию С++:Квадратная матрица и шахматная проблема..

Поздравляю всех с наступившим 2008 годом!
прошу помочь разобраться со следущим заданием:
Дано: квадратная матрица A[N][N] - таблица результатов некоторого шахматного турнира, в котором участвовало N шахматистов(N>2).
A[i,j]=B, если i-ый выиграл у j-го(при этом A[j,i]=П),
A[i,j] =Н, если i-ый и j-ый участники сыграли вничью, и A[i,j]=Х.За выигрыш дается 1 очко, за ничью 0,5 очка, за поражение - 0.
Распечатать номера участников в порядке не возрастания набранных ими очков. Подсчет очков одного участника оформить как функцию.

Заранее благодарен.
Andres вне форума Ответить с цитированием
Старый 02.01.2008, 12:24   #2
Goblin
Форумчанин
 
Регистрация: 24.11.2007
Сообщений: 196
По умолчанию

Я сам новичек в программирование.
Посмотри может подойдет?
Код:
#include <iostream>
#include <cstdlib>
using namespace std;
const int N = 3;

int main()
{
	double n[N] = {0,0,0};
	double a[N][N] = {{0, 1.0, 0.5},{0, 0, 0.5},{0, 0.5, 0}};

	for(int i = 0; i<N; i++)
	{
		for(int j = 0; j<N; j++)
		{
			n[i] += a[i][j];
		}
	}
	cout << "N1 " << n[0] << endl
	     << "N2 " << n[1] << endl
	     << "N3 " << n[2] << endl;

	system("PAUSE");
	return 0;
}
Если нужно осортировать массив вот хеадер:
sort_m.zip
Goblin вне форума Ответить с цитированием
Старый 02.01.2008, 12:40   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Поскольку язык сей не знаю, могу объяснить ход решения, если нужно, на "пальцах" или на Паскале.
puporev вне форума Ответить с цитированием
Старый 02.01.2008, 13:54   #4
Goblin
Форумчанин
 
Регистрация: 24.11.2007
Сообщений: 196
По умолчанию

Цитата:
Поскольку язык сей не знаю, могу объяснить ход решения, если нужно, на "пальцах" или на Паскале.
Если не трудно - давай!
Goblin вне форума Ответить с цитированием
Старый 02.01.2008, 15:40   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

По-русски долго объяснять, поэтому на Паскале. Код рабочий, если только при перепечатке какой-нибудь ляп не залез.
Код:
const n=8;
type matr=array[1..n,1..n]of char;
     rez=record          // Запись нужна для связи количества 
         nomer:integer;  // очков с номером игрока в таблице.
         ochki:real;
         end;
var a:matr;
    i,j,x:integer;
    Itog:array[1..n] of rez;//массив записей
    y:rez;                  //буфер для сортировки   
function Ochki(a:matr):real;//функция для подсчета очков
var k:real;
begin
   k:=0;
   for j:=1 to n do
      begin
         if a[i,j]='В'then k:=k+1;
         if a[i,j]='Н'then k:=k+0.5;
      end;
   Ochki:=k;
end;
begin
randomize;
for i:=1 to n do
   begin
      for j:=1 to n do
         begin
           if i=j then a[i,j]:='X';//главная диагональ
           if j>i then    //выше главной диаглнали
             begin
               x:=random(3);//заполняем случайным образом
               case x of
               0:a[i,j]:='П';
               1:a[i,j]:='Н';
               2:a[i,j]:='В';
               end;
             end;
        end;
   end;
for i:=1 to n do
   begin
      for j:=1 to n do
         begin
           if i>j then   //ниже главной диагонали
             begin
               case a[j,i] of
               'П':a[i,j]:='В';
               'Н':a[i,j]:='Н';
               'В':a[i,j]:='П';
               end;
             end;
         end;
   end;
for i:=1 to n do       //выведем матрицу на экран
   begin
      for j:=1 to n do
         begin
           write(a[i,j],' ');
         end;
      writeln;
   end;
readln;
for i:=1 to n do      
   begin
     Itog[i].ochki:=Ochki(a); //считаем количество очков по строкам
     Itog[i].nomer:=i;        //привязываем их к номеру строки
   end;
for i:=1 to n-1 do
for j:=1 to n-1 do
if Itog[j].ochki<Itog[j+1].ochki then //сортируем очки по невозрастаниюнию
   begin
      y:=Itog[j];Itog[j]:=Itog[j+1];Itog[j+1]:=y;
   end;
for i:=1 to n do            //выводим на экран номера игроков и их очки
writeln(Itog[i].nomer,' ',Itog[i].ochki:2:1);//в соответствии с занятым                   
readln                                     //местом
end.
Можно украсить и вывести сначала занятое место, затем номер и очки.
writeln(i,' место ',Itog[i].nomer,' ',Itog[i].ochki:2:1);
puporev вне форума Ответить с цитированием
Старый 02.01.2008, 20:04   #6
Goblin
Форумчанин
 
Регистрация: 24.11.2007
Сообщений: 196
По умолчанию

С паскалем едва знаком.
Напиши на русском, хотябы в общих чертах; или добавь побольше коментариев в свой исходник.
Goblin вне форума Ответить с цитированием
Старый 02.01.2008, 20:49   #7
Andres
 
Регистрация: 01.01.2008
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Goblin Посмотреть сообщение
Я сам новичек в программирование.
Посмотри может подойдет?
спасибо почти идет только вот:include\ios(9) : fatal error C1083: Cannot open include file: 'streambuf': No such file or directory
1 ошибочка, посмотри пожалуйста как исправить можно, без ошибок уж разберусь с программой.

Последний раз редактировалось Andres; 02.01.2008 в 20:51.
Andres вне форума Ответить с цитированием
Старый 02.01.2008, 21:06   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Максимально подробно.
Код:
const n=8;//константа, размерность матрицы
type matr=array[1..n,1..n]of char; тип-матрица, заполненная символами
     rez=record          // тип-запись нужна для связи количества 
         nomer:integer;  // очков с номером игрока в таблице.
         ochki:real;       //nomer и ochki - поля записи
         end;
var a:matr;   //переменная - матрица
    i,j,x:integer;   //численные переменные (i,j- счетчики, х-вспомогательная переменная)
    Itog:array[1..n] of rez;//массив записей, т.е. сведения о номерах и очках восьми человек
    y:rez;                  //буфер для сортировки   
function Ochki(a:matr):real;//функция для подсчета очков
var k:real; //счетчик очков
begin
   k:=0;
   for j:=1 to n do   //цикл
      begin
         if a[i,j]='В'then k:=k+1;//выигрыш +1 очко
         if a[i,j]='Н'then k:=k+0.5;//ничья +0,5 очка
      end;
   Ochki:=k;//общая сумма очков
end;
begin //начало программы
randomize; //процедура генерирования случайных чисел
for i:=1 to n do //внешний цикл
   begin
      for j:=1 to n do   //вложенный цикл
         begin
           if i=j then a[i,j]:='X';//на главной диагонали знак Х  //если i=j то Х
           if j>i then    //выше главной диагонали     //если j>i то цикл    
             begin
               x:=random(3);//заполняем случайным образом
               case x of       //оператор выбора
               0:a[i,j]:='П';    //если 0 то П
               1:a[i,j]:='Н';    //если 1 то Н
               2:a[i,j]:='В';    //если 2 то В
               end;
             end;
        end;
   end;
for i:=1 to n do    
   begin
      for j:=1 to n do
         begin
           if i>j then   //ниже главной диагонали
             begin
               case a[j,i] of
               'П':a[i,j]:='В';
               'Н':a[i,j]:='Н';
               'В':a[i,j]:='П';
               end;
             end;
         end;
   end;
for i:=1 to n do       //выведем матрицу на экран
   begin
      for j:=1 to n do
         begin
           write(a[i,j],' ');  //вывести значения матрицы в строку
         end;
      writeln;   //начать с новой строки
   end;
readln;      //прочитать, сделать задержку
for i:=1 to n do      
   begin
     Itog[i].ochki:=Ochki(a); //считаем количество очков по строкам
     Itog[i].nomer:=i;        //привязываем их к номеру строки
   end;
for i:=1 to n-1 do
for j:=1 to n-1 do
if Itog[j].ochki<Itog[j+1].ochki then //сортируем очки по невозрастаниюнию
   begin
      y:=Itog[j];Itog[j]:=Itog[j+1];Itog[j+1]:=y;   //сортировка методом "пузырька"
   end;
for i:=1 to n do            //выводим на экран номера игроков и их очки столбиком
writeln(Itog[i].nomer,' ',Itog[i].ochki:2:1);//в соответствии с занятым                   
readln                                     //местом
end.
Можно украсить и вывести сначала занятое место, затем номер и очки.
writeln(i,' место ',Itog[i].nomer,' ',Itog[i].ochki:2:1);
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрица Cartman18 Помощь студентам 4 13.12.2007 19:49
Дана целочисленная квадратная матрица... kitty Помощь студентам 1 05.12.2007 07:40
Паскаль. Квадратная матрица Deimossy Помощь студентам 2 20.11.2007 13:23