Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
prostochudo

Перевод из C# в Pascal ABC

05.12.2014, 15:20. Показов 2653. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, перевести код из C# в ABC Pascal.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <string.h>
#include <cmath>
#include <queue>
#include <vector>
#include <map>
#include <stdlib.h> // for exit(0)
#include <stack>
#include <list>
#include <ctime>
 
using namespace std;
 
const int MAX_VOT = 2e6 + 5;
const int MAX_INT = 2147483647;
 
struct party {
    int vot; // количество голосов
    int top; // цена лидера
    int num; // порядковый номер партии
    int pay; // цена партии
};
struct cmpVot {
    bool operator () (party const &a, int vot) const {
        return a.vot < vot;
    }
    bool operator () (int vot, party const &b) const {
        return vot < b.vot;
    }
    bool operator () (party const &a, party const &b) {
        return a.vot < b.vot;
    }
};
bool cmpPay (const party &a, const party &b) {
    return a.pay < b.pay;
}
bool cmpNum (const party &a, const party &b) {
    return a.num < b.num;
}
 
typedef vector<party>::iterator ITER;
 
int n;
vector<party> mas;
vector<long long> sum;
void input(){
    scanf("%d", &n);
    mas.resize(n);
    sum.resize(n);
    for (int i=0;i<n;i++) {
        mas[i].num = i;
        scanf("%d %d", &mas[i].vot, &mas[i].top);
    }
}
void findPayment(int pos) {
    if (mas[pos].top == -1) {
        mas[pos].pay = MAX_INT;
        return;
    }
    int resVot;
    int l = mas[pos].vot, r = MAX_VOT;
    while (l <= r) {
        int newVot = (l+r)>>1;
        ITER it = lower_bound(mas.begin(), mas.end(), newVot, cmpVot());
        if (it != mas.end() && newVot == mas[pos].vot) it++; 
        if (it != mas.end()) {
            int ind = it - mas.begin();
            long long f1 = sum[ind] - ((long long)n - ind)*(newVot - 1);
            long long f2 = newVot - mas[pos].vot;
            if  (newVot - mas[pos].vot            
                >=
                sum[ind] - ((long long)n - ind)*(newVot - 1) )
               
            {
                // можем купить
                resVot = newVot;
                r = newVot - 1;
            }
            else
                l = newVot + 1;
        }
        else {
            resVot = newVot;
            r = newVot - 1;
        }
    }
    mas[pos].pay = resVot - mas[pos].vot + mas[pos].top;
}
void changeVotes(int pos) {
    int newVot = mas[pos].pay - mas[pos].top + mas[pos].vot;
    int ind = lower_bound(mas.begin(), mas.end(), newVot, cmpVot()) - mas.begin();
   
    int delta = newVot - mas[pos].vot;
    mas[pos].vot = newVot;
 
    for (int i=ind;i<n;i++) {
        if (i == pos) continue;
        delta -= mas[i].vot - (newVot - 1);
        mas[i].vot = newVot - 1;
    }
    int i = n;
    while (delta) {
        i--;
        if (i == pos) continue;
        if (mas[i].vot > delta) {
            mas[i].vot -= delta;
            delta = 0;
        }
        else {
            delta -= mas[i].vot;
            mas[i].vot = 0;
        }
    }   
}
int resPay, resInd;
void solve(){
    sort(mas.begin(), mas.end(), cmpVot());
 
    sum[n-1] = mas[n-1].vot;
    for (int i=n-2;i>=0;i--)
        sum[i] = sum[i+1] + mas[i].vot;
    for (int i=0;i<n;i++)
        findPayment(i);
   
    int posMinPay = min_element(mas.begin(), mas.end(), cmpPay) - mas.begin();
    resPay = mas[posMinPay].pay;
    resInd = mas[posMinPay].num + 1;
    changeVotes(posMinPay);
 
    sort(mas.begin(),mas.end(),cmpNum);
}
void output() {
    printf("%d\n%d\n", resPay, resInd);
    for (int i=0;i<n;i++)
        printf("%d ", mas[i].vot); 
}
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
 
    input();
    solve();
    output();
 
    return 0;
}
Условие задачи было следующим:
В одной демократической стране приближаются парламентские выборы. Выборы проходят по следующей схеме: каждый житель страны, достигший восемнадцатилетнего возраста, отдает свой голос за одну из политических партий. После этого партия, которая набрала максимальное количество голосов, считается победившей на выборах и формирует правительство. Если несколько партий набрали одинаковое максимальное количество голосов, то они должны сформировать коалиционное правительство, что обычно приводит к длительным переговорам.

Один бизнесмен решил выгодно вложить свои средства и собрался поддержать на выборах некоторые партии. В результате поддержки он планирует добиться победы одной из этих партий, которая затем сформирует правительство, которое будет действовать в его интересах. При этом возможность формирования коалиционного правительства его не устраивает, поэтому он планирует добиться строгой победы одной из партий.

Чтобы повлиять на исход выборов, бизнесмен собирается выделить деньги на агитационную работу среди жителей страны. Исследование рынка показало, что для того, чтобы один житель сменил свои политические воззрения, требуется потратить одну условную единицу. Кроме того, чтобы i-я партия в случае победы сформировала правительство, которое будет действовать в интересах бизнесмена, необходимо дать лидеру этой партии взятку в размере pi условных единиц. При этом некоторые партии оказались идеологически устойчивыми и не согласны на сотрудничество с бизнесменом ни за какие деньги.

По результатам последних опросов известно, сколько граждан планируют проголосовать за каждую партию перед началом агитационной компании. Помогите бизнесмену выбрать, какую партию следует подкупить, и какое количество граждан придется убедить сменить свои политические воззрения, чтобы выбранная партия победила, учитывая, что бизнесмен хочет потратить на всю операцию минимальное количество денег.

Формат входных данных
В первой строке вводится целое число n – количество партий ( 1$ le$n$ le$105). Следующие n строк описывают партии. Каждая из этих строк содержит по два целых числа: vi – количество жителей, которые собираются проголосовать за эту партию перед началом агитационной компании, и pi – взятка, которую необходимо дать лидеру партии для того, чтобы сформированное ей в случае победы правительство действовало в интересах бизнесмена ( 1$ le$vi$ le$106, 1$ le$pi$ le$106 или pi = - 1). Если партия является идеологически устойчивой, то pi равно -1. Гарантируется, что хотя бы одно pi не равно -1.

Формат выходных данных
В первой строке выведите минимальную сумму, которую придется потратить бизнесмену. Во второй строке выведите номер партии, лидеру которой следует дать взятку. В третьей строке выведите n целых чисел – количество голосов, которые будут отданы за каждую из партий после осуществления операции. Если оптимальных решений несколько, выведите любое.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.12.2014, 15:20
Ответы с готовыми решениями:

Перевод из Pascal ABC.net в Pascal ABC
Помогите, пожалуйста, перевести программу в Pascal ABC с Pascal ABC.net; если не трудно, объясните, почему не компилирует программу Pascal...

Перевод кода с C++ на Pascal ABC
int main(int argc, char* argv) { int *A, *B, *C; int i, len, lenB, lenC; printf(&quot;Vvedite razmer massiva: &quot;); scanf(&quot;%d&quot;, &amp;len); ...

Перевод кода C++ в код Pascal ABC
здравствуйте помогите пожалуйста перевести код, поиск в глубину , вывод пути, “N” (движение вверх), “E” (движение вправо), “S” (движение...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.12.2014, 15:20
Помогаю со студенческими работами здесь

Перевод программы с Turbo Pascal на Pascal ABC.NET
написала программу в паскаль турбо на рабочем компьютере. перенесла в паскаль авсNet так как дома стоит эта версия /перестала работать что...

Перевод программы с turbo pascal на Pascal ABC
Есть программа, которая строит треугольник Серпинского методом хаоса, но она конфликтует с графикой ABC. Важен именно этот метод. ...

Перевод из turbo pascal в abc.net
Помогите адаптировать программу для abc.net из turbo pascal Program transportnaj_zadatsha; Uses Crt; Label l1; Const N=10; ...

Перевод из pascal ABC в C++
помогите перевести из паскаля на си: Uses GraphAbc; begin SetwindowSize (400,400); setpencolor(clRed); setpenwidth(4); ...

Перевод программы c Pascal ABC на С++
помогите сделать такую же программу только на С++. Программа рабочая const n=2; type TAr2=array of real; TAr1=array of real; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru