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

Правильность и рациональность кода - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
jlw
6 / 6 / 0
Регистрация: 30.09.2010
Сообщений: 18
30.09.2010, 19:30     Правильность и рациональность кода #1
Всем привет! Вот уже прошло 24 часа с момента начала моего обучения С++ . До этого имел дело с такими языками, как Pascal и PHP. Ко вторнику нужно решить 30 задач. Пока решил 2 и хотелось бы узнать, насколько правильно и оптимально я это сделал, чтобы далее двигаться более рациональным путем. Может быть пропущены какие-то важные моменты? Кусок кода можно переписать гораздо легче? Или я вообще сделал "как не следует"? Прошу ответить на эти вопросы! А теперь перейдем к самим задачам.


ограничение времени на тест: 1 сек.
ограничение памяти на тест: 4096 KB.
ввод: input.txt
вывод: output.txt

Совсем скоро в Берляндии состоится первый традиционный Всеберляндский маскарад. Правительство Берляндии в срочном порядке сформировало министерство по подготовке маскарада. Перед министерством встала сложная задача: известно, что 1 метр ткани стоит P бурлей, а на пошив костюмов членам правительства необходимо приобрести N метров ткани. Ваша задача, сколько бурлей потратит министерство на покупку ткани.

Входные данные
В первой строке входного файла записано два натуральных числа через пробел P и N (1<=P<=100, 1<=N<=100).

Выходные данные
Выведите единственное натуральное число - необходимое количество бурлей на покупку N метров ткани по P бурлей за метр.
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
// Реализация в VS2008
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
int main() {
    FILE *input, *output;
    char buf[8] = buf2[8] = buf3[8] = out[8] = "";
    int p, n, g = 0;
    
    input = fopen("input.txt", "r" );
    fgets(buf, 8, input);
    fclose(input);
    
    for (int i = 0; i < int(strlen(buf)); i++) {
        if (buf[i] != 32) {
            buf2[i] = buf[i];
        } else {
            for (int z = i+1; z < int(strlen(buf)); z++) {
                buf3[g] = buf[z];
                g++;
            }
            break; 
        }
    }
    
    p = atoi(buf2);
    n = atoi(buf3);
        
    output = fopen("output.txt", "w" );
    itoa((p*n),out,10);
    fputs(out, output);
    fclose(output);
}
ограничение времени на тест: 1 сек.
ограничение памяти на тест: 65536 KB.
ввод: input.txt
вывод: output.txt

Найдите количество натуральных нечетных чисел меньших N.

Входные данные
Во входном файле записано целое число N (-1000<=N<=1000).

Выходные данные
Выведите искомое число.
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
// Реализация в wxDev C++
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main() {
    FILE *input, *output;
    unsigned short n;
    int z = 0;
    char buffer[6], out[5];
    
    input = fopen("input.txt", "r" );
    fgets(buffer, 6, input);
    fclose(input);
 
    n = atoi(buffer);
    
    if (n > 0 and n <= 1000) {
        for (int i = n; i > 0; --i) {
            if (i % 2 != 0) {
                ++z;
            }
        }
    } else {
        z = 0;
    }
    
    output = fopen("output.txt", "w" );
    fputs(itoa(z,buffer,10), output);
    fclose(output);
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jlw
6 / 6 / 0
Регистрация: 30.09.2010
Сообщений: 18
30.09.2010, 23:35  [ТС]     Правильность и рациональность кода #21
а в С ? но как ни странно прокатило, компилятор wxDev C++ .
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
30.09.2010, 23:37     Правильность и рациональность кода #22
jlw, О_о
or прокатило в wxDev C++? О_о
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
30.09.2010, 23:38     Правильность и рациональность кода #23
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от gooseim Посмотреть сообщение
Вообще-то в c++ такого оператора вообще нет...
Ну вообще-то есть, просто не все об этом знают

http://www.cppreference.com/wiki/operator_precedence


C++ defines keywords to act as aliases for a number of symbols that function as operators: and (&&), bitand (&), and_eq (&=), or (||), bitor (|), or_eq (|=), xor (^), xor_eq (^=), not (!), not_eq (!=), compl (~). These are parsed exactly like their symbolic equivalents, and can be used in place of the symbol they replace. It is the character or string that is aliased, not the operator. As a result, bitand is used to replace the bitwise AND operator, the address-of operator, and can be used to specify reference types (e.g. int bitand ref = n; ).

http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
30.09.2010, 23:40     Правильность и рациональность кода #24
NightmareZ, Омфг. И правда. Но MSVS это не проглатывает.
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
30.09.2010, 23:42     Правильность и рациональность кода #25
Цитата Сообщение от Lavroff Посмотреть сообщение
Но MSVS это не проглатывает.
Ну это да.
jlw
6 / 6 / 0
Регистрация: 30.09.2010
Сообщений: 18
30.09.2010, 23:44  [ТС]     Правильность и рациональность кода #26
Буду знать)

А в остальном код хорош?)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
30.09.2010, 23:47     Правильность и рациональность кода #27
Вполне. Использование using namespace и return 0 - несколько холливарная тема.

NightmareZ, не знаешь почему в MSVS это не катит?
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
30.09.2010, 23:48     Правильность и рациональность кода #28
Ну вообще-то есть, просто не все об этом знают
Действительно, даже в стандарте оператор or прописан. Этого я не знал.
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
30.09.2010, 23:48     Правильность и рациональность кода #29
Цитата Сообщение от Lavroff Посмотреть сообщение
NightmareZ, не знаешь почему в MSVS это не катит?
Неа, понятия не имею.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
30.09.2010, 23:51     Правильность и рациональность кода #30
jlw, код вполне хороший.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.09.2010, 23:53     Правильность и рациональность кода #31
Цитата Сообщение от NightmareZ Посмотреть сообщение
Ну вообще-то есть, просто не все об этом знают
Нет, судя по стандарту, подобных операторов в языке C++ нет.
Все эти
Цитата Сообщение от NightmareZ Посмотреть сообщение
and (&&), bitand (&), and_eq (&=), or (||), bitor (|), or_eq (|=), xor (^), xor_eq (^=), not (!), not_eq (!=), compl (~)
должны заменяться на стадии препроцессирования.
Цитата Сообщение от C++03
The lexical representation of C+ + programs includes a number of preprocessing tokens which are used in the syntax of the preprocessor or are converted into tokens for operators and punctuators.
Т.е. до компилятора доходит уже "чистый" исходник.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
30.09.2010, 23:55     Правильность и рациональность кода #32
CyBOSSeR, стандарт ISO/IEC 14882. Страница 15. Или я не то смотрю?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.09.2010, 23:59     Правильность и рациональность кода #33
gooseim, именно то, но, насколько я понял, получается, что данные "операторы" являются лишь эквивалентами соответсвующих операторов и заменятся препроцессором, компилятор подобные "операторы" "не ест". Я, конечно, могу ошибатся. Для того, чтобы проверить, нужно попробовать посмотреть исходник с подобными "операторами" после стадии обработки препроцессором.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
01.10.2010, 00:12     Правильность и рациональность кода #34
CyBOSSeR, думаю, если вы правы, то в стандарте это 100% должно быть отображено. А я пока не нашел.
Для точго чтобы проверить, нужно попробовать посмотреть исходник с подобными операторами после стадии обработки препроцессором.
Тогда мы будем зависеть от конкретного компилятора, а можно ли ему верить?

Добавлено через 2 минуты
Не так выразился. Под компилятором я подразумевал среду разработки, т.е. конкретный препроцессор.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.10.2010, 00:18     Правильность и рациональность кода #35
gooseim, значит надобно найти несколько IDE съедающих эти операторы.
MSVS не "ест", а вот g++ 4.1.2 на codepad.org "ест". Если у кого то есть g++ (у меня нет) можно попробовать.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
01.10.2010, 00:20     Правильность и рациональность кода #36
Цитата Сообщение от jlw Посмотреть сообщение
А в остальном код хорош?
Я бы не рекомендовал завершать приложение в Си++ командой exit(), это хорошо для Си, но не очень для Си++.

Добавлено через 1 минуту
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Если у кого то есть g++ (у меня нет) можно попробовать.
C++
1
2
3
4
5
int main()
{   
    if(true and true)
        std::cout << "it works" << std::endl;
}
Нормально
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.10.2010, 00:21     Правильность и рациональность кода #37
fasked, а можешь посмотреть исходник после обработки препроцессором? Буду весьма признателен.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
01.10.2010, 00:37     Правильность и рациональность кода #38
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
а можешь посмотреть исходник после обработки препроцессором?
Если я все правильно сделал, то следующее (все инклуды выкинул, а то слишком много текста получается)
Код
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"
int main()
{
    if(true and true)
        ;
}
Использовал такую команду:
Код
g++ -E main.c
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.10.2010, 00:41     Правильность и рациональность кода #39
О как... Правильно говорят: "Век живи - век учись". Спасибо, fasked и NightmareZ, .
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2010, 01:21     Правильность и рациональность кода
Еще ссылки по теме:

Проверьте правильность кода C++
Правильность кода C++
C++ Метод хорд, проверьте правильность кода

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

Или воспользуйтесь поиском по форуму:
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
01.10.2010, 01:21     Правильность и рациональность кода #40
Тоже хочу поблагодарить fasked и NightmareZ.
Особая благодарность jlw. Если бы не вы, я бы так и остался темным человеком.
Yandex
Объявления
01.10.2010, 01:21     Правильность и рациональность кода
Ответ Создать тему
Опции темы

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