Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: renesans в Dec 08, 2010, 15:00



Титла: Задача по С!
Публикувано от: renesans в Dec 08, 2010, 15:00
Здравейте, имам една задача на гореспоменатия език. От 6 условия 4 оправих но в едно не мога да вникна а другото реално не мога и да направя:
1.Среден брой цифри на ред във файл спрямо общия брой цифри в целият файл?
2.На всеки ред в средата поставете знаците "***".

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


Титла: Re: Задача по С!
Публикувано от: bop_bop_mara в Dec 08, 2010, 15:06
1вото означава да преброиш колко цифри има във файла и да го разделиш на броя на редовете в него (и получаваш средно по колко цифри има на ред).
2рото аз го разбирам като отделяш си ред от файла, гледаш му дължината, смяташ къде е средата му и там слагаш ***... предполагам, че тия звездички трябва да презапишат 3те "центални" байта.

Какъв е замисъла... без коментар (и без идея) :)


Титла: Re: Задача по С!
Публикувано от: renesans в Dec 08, 2010, 15:18
Да, за първото сега го схванах и ще го направя вече ми е ясно как.
Обаче реализацията като код на второто не я мога май, казано най общо. Мога да чета и пиша във файл но никога не съм добавял вътре в ред. Иначе средата на реда знам как да я намеря даже по два начина обаче...


Титла: Re: Задача по С!
Публикувано от: bop_bop_mara в Dec 08, 2010, 15:34
Да, за първото сега го схванах и ще го направя вече ми е ясно как.
Обаче реализацията като код на второто не я мога май, казано най общо. Мога да чета и пиша във файл но никога не съм добавял вътре в ред. Иначе средата на реда знам как да я намеря даже по два начина обаче...
Кои функции ползваш (трябва да ползваш) за i/o?


Титла: Re: Задача по С!
Публикувано от: renesans в Dec 08, 2010, 15:42
Понеже трябва да има меню за това какво да се прави по избор ползвам няколко:
fgetc
scanf
за вход.
Няма ограничения по задачата какво да ползвам и гото може :)


Титла: Re: Задача по С!
Публикувано от: bop_bop_mara в Dec 08, 2010, 16:07
Код:
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>

int main()
{
    FILE* f = fopen("myfile","r+"); //open file for update, see fopen for more info
    if(f == NULL)
    {
        return EXIT_FAILURE;
    }
    int status = fseek(f, 10, SEEK_SET); // go to 10th position, see fseek for more info
    if(status !=0)
    {
        return EXIT_FAILURE;
    }
    status = fputs("***",f); // write a sequence of bytes to file, see fputs for more info
    if(status == EOF)
    {
        return EXIT_FAILURE;
    }
    return EXIT_SUCCESS;
}

Код
GeSHi (Bash):
  1. mara@OVNIWatermelon:~$ gcc trystdio.c
  2. mara@OVNIWatermelon:~$ cat myfile
  3. 01234567890123456789
  4. qwertyuiop
  5. mara@OVNIWatermelon:~$ ./a.out
  6. mara@OVNIWatermelon:~$ cat myfile
  7. 0123456789***3456789
  8. qwertyuiop
  9. mara@OVNIWatermelon:~$

Разгледай това, би трябвало да те насочи :)


Титла: Re: Задача по С!
Публикувано от: idiotbg в Dec 08, 2010, 19:14
2.На всеки ред в средата поставете знаците "***".

Тук трябва да се уточни как точно да стане, средата е между 2 символа, когато броят на символи е четен (разбирай и 0 символа - празен ред) и средата е символ, когато броят е нечетен. Т.е. трябва да уточиш

1) дали вмъкваш или презаписваш
2) коя е началната позиция (пореден символ), на която започваш да извършваш действието от 1)

Освен това трябва да уточниш, ако трябва да презаписваш, какво правиш, когато на реда има по-малко символи, от колкото искаш да презапишеш.


Титла: Re: Задача по С!
Публикувано от: renesans в Dec 08, 2010, 19:46
Няма опълнителни анни за това в заачата. Поставяш в средата на всеки ред това *** и толкова. Не е казано да се брои дали реда не е с 2 сомвола или празен.
Аз още не съм се справил с това!


Титла: Re: Задача по С!
Публикувано от: b2l в Dec 08, 2010, 19:47
//off
Няма опълнителни анни за това в заачата. Поставяш в средата на всеки ред това *** и толкова. Не е казано да се брои дали реда не е с 2 сомвола или празен.
Аз още не съм се справил с това!

От рано си почнал да празнуваш ми се струва :D :D :D :D  [_]3 [_]3 [_]3 [_]3 [_]3


Титла: Re: Задача по С!
Публикувано от: bop_bop_mara в Dec 08, 2010, 19:49
Няма опълнителни анни за това в заачата. Поставяш в средата на всеки ред това *** и толкова. Не е казано да се брои дали реда не е с 2 сомвола или празен.
Аз още не съм се справил с това!
Е нямаш ли кого да питаш? Ако идеята е да се презапишат средните байтове (аз така го разбирам, защото вмъкването на място е доста по-сериозна и безсмислена задача), това, което ти показах трябва да те ориентира добре.

ПС. backtolife, ти не си ли имал кофти клаиатура? ;)


Титла: Re: Задача по С!
Публикувано от: b2l в Dec 08, 2010, 19:52
Няма опълнителни анни за това в заачата. Поставяш в средата на всеки ред това *** и толкова. Не е казано да се брои дали реда не е с 2 сомвола или празен.
Аз още не съм се справил с това!
Е нямаш ли кого да питаш? Ако идеята е да се презапишат средните байтове (аз така го разбирам, защото вмъкването на място е доста по-сериозна и безсмислена задача), това, което ти показах трябва да те ориентира добре.

ПС. backtolife, ти не си ли имал кофти клаиатура? ;)

Не, но съм имал кофти алкохолизация :D :D :D :D.


Титла: Re: Задача по С!
Публикувано от: renesans в Dec 08, 2010, 19:54
Проблемът е че аз съм помагащия, има идея от други езици горе-долу, но не и от С. Обаче скалъпих другата част без тази.