Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Массивы

Автор: Merlin 10.04.2006 4:18

Задание :
-------------------
Даны итоги выборов в Думу города. По К округам известно число голосовавших за представителей М партий. Считая, что от каждого округа в Думу проходит по одному представителю, составить алгоритм и программу, которые определяют, какая партия провела наибольшее число своих кандидатов (предполагая, что все кандидаты набрали разное число голосов).
------------------------------------
Это задачу мне надо переделать из Паскаля в Си, но возникают ошибки..

Вот задача в Паскале :

Program z;
const
K=5;
M=4;
Results: array[1..K,1..M] of integer=
(
(2,1,3,4),
(7,1,5,2),
(4,1,2,5),
(8,1,8,8),
(2,1,6,3)
);
Var
Party: array[1..M] of integer;
i,j:integer;
maxParty,Posmax:integer;
begin
for i:=1 to K do begin
Posmax:=1;
for j:=2 to M do
if Results[i,j]>Results[i,Posmax]
then Posmax:=j;
Inc(Party[Posmax]);
end;
maxParty:=1;
for i:=2 to M do
if Party[i]>Party[maxParty]
then maxParty:=i;
writeln('Party#', maxParty);
readln;
end.



А вот попытка сделать её в Си :


#include <stdio.h>
#include <conio.h>
#include <iostream.h>
int main()
{
const int K=5;
const int M=4;
int Results[0..K][0..M]={ {2,1,3,4},
{7,1,5,2),
{4,1,2,5},
{8,1,8,8},
{2,1,6,3}
};
int Party[M];
int i,j;
int maxParty,Posmax;
for(i=1; i<K; i++)
Posmax=1;
for(j=2; j<M; j++)
{
if( Results[i][j]> Results[i,Posmax])
Posmax=j;
Party[Posmax]++;
}
maxParty=1;
for(i=2; i<M; i++)
{ if( Party[i]>Party[maxParty])
maxParty=i;

}

cout<<"Party#"<<maxParty<<endl;

return 0;
}

Автор: Merlin 10.04.2006 4:31

Извините что вопрос не в тему , но всё же :
-------

Есть ли в С, С++ что нибудь наподобие множеств...или это дело надо объявлять через массив символов ?

Автор: volvo 10.04.2006 4:36

Структуру программы зачем перековеркал?

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
int main() {

const int K = 5;
const int M = 4;
int Results[K][M] = {
{2,1,3,4},
{7,1,5,2},
{4,1,2,5},
{8,1,8,8},
{2,1,6,3}
};

int Party[M] = {0};
int maxParty;

for(int i=0; i<K; i++) {
int Posmax = 0;
for(int j=1; j<M; j++)
if(Results[i][j] > Results[i][Posmax]) Posmax = j;

Party[Posmax]++;
}

maxParty = 0;
for(i=1; i<M; i++)
if(Party[i] > Party[maxParty]) maxParty = i;

cout << "Party #" << maxParty + 1 << endl;
return 0;
}

(проверялось на TC++ 3.0)

Насчет множеств - в C++ есть замена. В STL... Но это - смотря какой у тебя компилятор.

Автор: Merlin 10.04.2006 5:02

Спасибо за такой быстрый ответ, у меня компилятор TC++ 3.0 .

Автор: volvo 10.04.2006 5:04

Тогда о готовых решениях забудь - в TC++ 3.0 тебе придется все делать ручками...

Автор: Merlin 10.04.2006 7:46

Ну ничего..у меня тут ещё около 5 дисков лежат... good.gif Поставлю ещё что нибудь