|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Си, функциональная декомпозиция |
|
C/C++ - Си, функциональная декомпозиция
|
Новый участник Сообщения: 33 |
Профиль | Отправить PM | Цитировать
Написал текст программы, которая определяет простое ли число или нет( число записано в файле), чтобы ее сдать, нужно выполнить ф. декомпозицию. Что это такое в общем я понимаю, ну понимаю каким образом нужно раскинуть эти функции, чтобы они в нужном порядке выполнялись и возвращали те значения. которые необходимы для дальнейшей работы. Буду очень признателен, за какую-либо помощь в этом деле)
(заголовочный файл rus8.h позволяет выводить на экран на русском, а не козиябликами, это чтоб вопросов не возникало)) ) вот текст программы: #include "stdio.h" #include "conio.h" #include "rus8.h" #define FNAME "qwe.txt\0" void main() { rus(); char fname[20] = FNAME; FILE *f; int num; int del = 2; double ost; printf("\nПрограмма, проверяющая простоту числа. содержащегося в файле %s\n", fname); if((f = fopen(fname, "r")) == NULL) { printf ("Ошибка при открытии файла"); getch(); return; } while(!feof(f)) { fscanf(f, "%i", &num); } fclose(f); printf("проверяемое число - это : %i\n", num); while(del <= num-1) { ost = num % del; if(ost == 0) { printf ("Число %i не являтся простым", num); getch(); return; } else del++; } printf ("Число %i - простое число!", num); getch(); } |
|
Отправлено: 23:42, 17-10-2009 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Цитата Lisiy_egik:
разбей по принципу 1. инициализация void init(); 2. ввод int input(); 3. обработка bool process(int); 4. вывод void output(bool); 5. чистка мусора void cleanup(); потом навык пригодится в ООП |
|
Отправлено: 10:57, 18-10-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать сдаюсь - никак не могу понять, почему не передается значение функции Simple, вот что у меня получилось:
Main.cpp #include "stdio.h" #include <stdlib.h> #include "conio.h" #include "rus8.h" #include "FileOpen.h" #include "Simple.h" bool ReadInputData( FILE *fin, int *pnum ); void main() { rus(); FILE *fin; int num; if( false == FileOpen( &fin, "number.txt", "rt" ) ) exit( 1 ); if( false == ReadInputData( fin, &num ) ) exit( 2 ); FileClose( fin ); if(Simple(int num) == false) { printf( "Число %i не является простым\n", num ); getch(); } else printf( "Число %i простое!\n", num ); getch(); } bool ReadInputData( FILE *fin, int *pnum ) { int retScan = fscanf( fin, "%i", pnum ); if( retScan == EOF ) { printf( "Файл для чтения пуст\n" ); getch(); return false; } if( retScan != 1 ) { printf( "Неверный формат ввода\n" ); getch(); return false; } return true; } #pragma once #include "stdio.h" bool FileOpen( FILE **pFin, const char *filename, const char *mode ); void FileClose( FILE *f ); #include "Simple.h" bool Simple(int num) { int del = 2; double ost; while(del <= num-1) { ost = num % del; if( ost = 0 ) { return false; } else del++; } return true; } Simple.cpp |
Отправлено: 21:56, 18-10-2009 | #3 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Lisiy_egik, вызов функции
Цитата Lisiy_egik:
|
|
Отправлено: 22:11, 18-10-2009 | #4 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Цитата Admiral:
|
||
Отправлено: 08:11, 19-10-2009 | #5 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Lisiy_egik, почему ты используешь такие угловатые конструкции (типа == false). Попробуй как бы написать словами, что ты хочешь сделать:
bool get_from_file(int& value); // здесь открывается и закрывается файл void output(const int& value, bool prime); // здесь печатается текст bool is_prime(const int& value); // только проверка на простоту void error_message(const char*); // выдача сообщения в лог int main() { init(); // здесь установить русскую кодировку int value = 0; // значение if (get_from_file(value)) // если взял значение value из файла { output(value, is_prime(value)); // вывел значение value и "простое оно или нет" } else { error_message("не могу прочитать значение"); } } ещё 2 подхода в булевым выражениям, облегчающие жизнь: 1. хитрая форма оператора if: условие ? выражение_да : выражение_нет выражение_да и выражение_нет должны иметь один тип данных printf(is_prime ? "да" : "нет"); 2. табличные функции. Пользуемся тем, что по правилам С++ (но не С), булевское выражение имеет значения 0 или 1. значит его можно использовать в качестве индекса массива из 2-х элементов static const char* str_primes[2] = {"не простое", "простое"}; printf(primes[is_prime]); если is_prime - не булевское, надо сделать приведение: printf(primes[bool(is_prime)]); |
Последний раз редактировалось pva, 19-10-2009 в 09:25. Отправлено: 09:09, 19-10-2009 | #6 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать pva, , спасиб за совет, он совсем не будет лишним в дальнейшей практике)
а насчет предыдущего своего сообщения об постоянном возвращении правды - у меня была опечатка, в Simple.cpp я условие цикла if задал как присваивание, а не сравнение)) |
Отправлено: 17:15, 19-10-2009 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Не работает функциональная кнопка яркость (+/-) на Sony VAIO | Petya V4sechkin | Ноутбуки | 313 | 23-01-2022 11:01 | |
Не работает функциональная кнопка WiFi | iPetry | Ноутбуки | 10 | 12-10-2011 13:07 | |
Система - Функциональная схема с описанием работы всех блоков и систем | Pashuta | Программное обеспечение Windows | 1 | 23-05-2009 11:14 |
|