Форум программистов, компьютерный форум CyberForum.ru

Деление - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.03.2011, 16:27     Деление #1
Оригинал условия тут
Входной файл input.txt:
Первая строка-количество фирм
Вторая строка-доходы фирм
Третья строка-налог на фирмы(в процентах)
Выходной файл:номер фирмы с наибольшим доходом с учетом налога.
Пример
input.txt:
3
100 1 50
0 100 3
output.txt:3
При вычислении дохода с учетом налога у меня стабильно получается 0...
Пробовал с int,float и double
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
int a,i,c[100],d[100],b=0;
double e=0;
scanf("%i",&a);
for (i = 0; i < a; i++) scanf("%i",&c[i]);
for (i = 0; i <a; i++){
    scanf("%i",&d[i]);
    if ((double)(d[i]-c[i]*(d[i]/100))>e) {
        b=i+1; e=(double)(d[i]-c[i]*(d[i]/100));
    }
}
printf("%i",b);
return 0;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2011, 16:27     Деление
Посмотрите здесь:

C++ Деление на 0
Деление C++
деление на 0 C++
Деление C++
деление на 0 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
20.03.2011, 16:29     Деление #2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var n, i, j, m: word;
v, p, t: array [0..100] of cardinal;
inf, outf: text;
 
begin
assign(inf, 'INPUT.TXT'); reset(inf);
assign(outf, 'OUTPUT.TXT'); rewrite(outf);
 
readln(inf, n);
for i := 1 to n do read(inf, v[i]); readln(inf);
for i := 1 to n do read(inf, p[i]);
for i := 1 to n do t[i] := v[i] * p[i]; t[0] := 0;
for i := 1 to n do if t[i] > t[m] then m := i;
write(outf, m);
 
close(inf);
close(outf);
end
что вы хотели тем кодом сказать, так и не понял
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.03.2011, 16:33  [ТС]     Деление #3
Цитата Сообщение от iama Посмотреть сообщение
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var n, i, j, m: word;
v, p, t: array [0..100] of cardinal;
inf, outf: text;
 
begin
assign(inf, 'INPUT.TXT'); reset(inf);
assign(outf, 'OUTPUT.TXT'); rewrite(outf);
 
readln(inf, n);
for i := 1 to n do read(inf, v[i]); readln(inf);
for i := 1 to n do read(inf, p[i]);
for i := 1 to n do t[i] := v[i] * p[i]; t[0] := 0;
for i := 1 to n do if t[i] > t[m] then m := i;
write(outf, m);
 
close(inf);
close(outf);
end
что вы хотели тем кодом сказать, так и не понял
Или я ослеп, или это код паскаля в ветке с++...
Насколько я помню, в паскале нет проблем с делением, int там не округляется=\
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
20.03.2011, 16:37     Деление #4
diagon, какое деление? мы точно об одной программе говорим?

(это толстый намек, на то, что делить на 100 необязательно)
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.03.2011, 16:40  [ТС]     Деление #5
Точно об одной...
Чтобы найти доход фирмы с учетом налога нужно из дохода вычесть доход*(процент/100)
И в этом месте у меня стабильно выходит ноль из-за (я так думаю) грубого округления int'а, хоть я и использую double.
А как тогда? Процент может быть равен нулю если что, делить на него нельзя.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
20.03.2011, 16:47     Деление #6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
main(){
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int a, i, c[100], d[100], b = 0;
scanf("%i", &a);
for (i = 0; i < a; i++) scanf("%i", &c[i]);
for (i = 0; i < a; i++) {
        scanf("%i", &d[i]);
        if (d[i]*c[i] > d[b]*c[b]) b = i;
}
printf("%i", b);
return 0;
}
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.03.2011, 09:40  [ТС]     Деление #7
Однако это не первый раз, когда я не могу что-то поделить в с++, используя как int так и float/double, и мне интересно, в чем причина... Гуглил, вроде все по мануалу делаю... Переменная double, перед присваиваемым выражением ставлю (double)...
Есть догадки, что, когда я ставлю перед выражением (double), оно сначала вычисляется в int(т.е. грубо округляется), и затем уже переводится в double... Но что тогда можно сделать, я не представляю, не ставить же (double)перед каждой переменной..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2011, 10:12     Деление
Еще ссылки по теме:

Деление на 1 C++
C++ Деление
Деление на 6 C++

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

Или воспользуйтесь поиском по форуму:
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
21.03.2011, 10:12     Деление #8
diagon, Ты к (double) приводишь после деления. Во время деления компилятор думает, что числа целые, и делит их как целым положено, т.е. нацело. А уж потом приводит к (double). Нужно чтоб к каждом действии хоть один операнд был double. В твоем случае достаточно написать 100.0 - и все будет хорошо.
В утешение могу сказать, что не тебя одного мучает эта проблема, у половины форума (во всяком случае в этом разделе) по этому поводу голова болит.
Yandex
Объявления
21.03.2011, 10:12     Деление
Ответ Создать тему
Опции темы

Текущее время: 21:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru