Премини към съдържанието

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

peeter

Проблем с програма на C

Препоръчан отговор


Здравейте колеги имам да напиша функция на С,която чете цели числа от текстов файл с указател и име,посочени като параметри и връща като резултат сумата и броя на тези числа, които са четни и се делят без остатък на 3.Функцията връща: 0 за сумата и -1 за броя,ако файлът не съдържа нечетни цели числа които се делят без остаттък на 3.
Написал съм следния код... но не зная как да продължа за" връща като резултат сумата и броя на тези числа, които са четни и се делят без остатък на 3.Функцията връща: 0 за сумата и -1 за броя,ако файлът не съдържа нечетни цели числа които се делят без остаттък на 3"..някой ако може да ми подскаже как трябва да стане ще съм много благодарен 

int readFile(FILE*fp,char*fname)
{
int x,flag,broj=0,sum=0
fp=fopen(fname,"r");
if(fp ==NULL)
return 0 ;
while((flag=fscanf(fp,"%d"&x))!=EOF)
{
и нататък незнам как ще стане Публикувано изображение

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Последно четни или нечетни, които се делят на 3?

И как го пишете този пост, с такъв сив фон не се чете!

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Последно четни или нечетни, които се делят на 3?

И как го пишете този пост, с такъв сив фон не се чете!

четни....сбъркал съм при писането

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

четни....сбъркал съм при писането

ето ви една проста проверка дали числото е четно и едновременно с това се дели на 3

if ( a%6 == 0 )....

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Здравейте, 

Нека уточним няколко неща:

1) Функцията не може да връща 2 резултата с един int параметър - т.е. има два варианта

   - Метода да е void и да принти в конзолата двете числа, които се искат ИЛИ

   - Дефинираме структура, която да съдържа като полета broj и sum, искани за резултат. Функцията ще връща указател към инстанция на такава структура.

 

2) Тялото на метода Ви, ми подсказва, че не е мислено за такава структура, което априори ще означава, че метода ще е void и ще се ползва printf за показване на резултат. 

Метода Ви е почти написан, като в while-а можете директно да направите if - проверката, която колегата над мен е дал 

 

Съответно ако се дели на 6 (четно число, делящо се на 3), то сумирате към sum и инкрементирате broj с едно. След while блока проверявате дали sum и broj са различни от нула и ги принтирате с printf а ако са нули - принтирате съответно:

 

 

Това е втория случая, описан в точка 1). Ако искате да запазите тези стойности и да бъдат използвани като данни за други методи, то или трябва да подадете broj и sum към функцията (и то като указатели или псевдоними), или отиваме на метода със стра

Благодаря Ви за подробното обяснение...А можеш ли да ми я нпишеш самата функция как ще стане по този метод ....че не разбирам много от С  Тялото на метода Ви, ми подсказва, че не е мислено за такава структура, което априори ще означава, че метода ще е void и ще се ползва printf за показване на резултат. 

Метода Ви е почти написан, като в while-а можете директно да направите if - проверката, която колегата над мен е дал 

 

Съответно ако се дели на 6 (четно число, делящо се на 3), то сумирате към sum и инкрементирате broj с едно. След while блока проверявате дали sum и broj са различни от нула и ги принтирате с printf а ако са нули - принтирате съответно:

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ще я предоставя псевдо-кода на втория начин:

int readFile(FILE *fp,char *fname){    int x,flag,broj=0,sum=0;    fp=fopen(fname,"r");    if(fp !=NULL)    {        while((flag=fscanf(fp,"%d", &x))!=EOF)        {            if (x%6 == 0)            {                sum += x;                broj++;            }        }        if (broj)        {            printf("Broj: %d n", broj);            printf("Sum: %d n", sum);        }         else         {            printf("Broj: -1 n");            printf("Sum: 0 n");        }    }}

Има и по-оптимизирани варианти в които може да се спестят няколко операции, но в тях има коригиращи формули от чисто математически характер и ще Ви объркат. Може за упражнение да се опитате да направите варианта със структура (ако Ви се занимава с програмиране по принцип, разбира се ...).

 

Поздрави !

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.