Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 16
1

Описать функцию TextSize (Name) целого типа, возвращающую число строк в текстовом файле

12.05.2009, 13:19. Показов 2938. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Описать функцию TextSize(Name) целого типа, возвращающую число строк в текстовом файле с именем Name. Если файл не существует, то функция возвращает -1. С помощью этой функции определить размер трёх файлов с данными именами.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2009, 13:19
Ответы с готовыми решениями:

Описать функцию целого типа, возвращающую число строк в текстовом файле
Описать функцию TextSize(Name) целого типа, возвращающую число строк в текстовом файле с именем...

Описать функцию целого типа, возвращающую N-ю цифру целого положительного числа K
описать функцию DigitN (K,N) целого типа ,возвращающую N-ю цифру целого положительного числа K (...

Описать функцию Digit N (K, N) целого типа, возвращающую N-ю цифру целого положительного числа R
Описать функцию Digit N(K,N) целого типа, возвращающую N-ю цифру целого положительного числа R....

Описать функцию DigitN (K, N) целого типа, возвращающую N-ю цифру целого положительного числа K
описать функцию DigitN (K,N) целого типа ,возвращающую N-ю цифру целого положительного числа K (...

20
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
12.05.2009, 13:51 2
На чем застрял?
0
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 16
12.05.2009, 14:30  [ТС] 3
Не понял насчёт трёх файлов, какие три файла, откуда, как размер посчитать...
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
12.05.2009, 14:44 4
Ну просто вызови эту функцию с именами трех файлов. Любых у тебя на винте.
Размер можно определить кучей способов. Например fstat. Или winapi - getfilesize.
0
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 16
12.05.2009, 14:48  [ТС] 5
Как выглядит оператор вызова сразу трёх файлов напиши пожалуйста.
0
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
12.05.2009, 14:55 6
Зачем сразу трех? Можно ведь последовательно вызывать эту ф-ю для каждого файла. Ну а чтобы узнать число строк, делай fgets в цикле и увеличивай счетчик строк, пока тот не вернет NULL.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
12.05.2009, 14:56 7
Три раза вызови функцию
0
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 16
12.05.2009, 15:13  [ТС] 8
Спасибо, ни хрена не понимаю.
Тогда вопрос, как сделать динамический двумерный массив символов.
и возможно ли заполнить его с помощью gets(), как это сделать?
C++
1
2
3
4
5
6
7
8
9
int i, j;
 
   cout<<"Vvedite max razmer stroki = ";
   cin>>i;
 
   cout<<"Vvedite max kolichestvo strok = ";
   cin>>j;
 
   **str = new char *[i];
Вот это, я предполагаю правильно создал динам. массив символов... А Дальше - Как заполнять?
0
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 16
16.05.2009, 23:01  [ТС] 9
Написал прогу:

два вопроса, как определить размер открываемого файла, и как сделать чтоб в случае, если файл не существует функция возвращала -1, и выводилось бы сообщение, что файл не найден.
Пробовал вставлять в функцию такое условие, оно работает если файл не найден, но когда файл есть, почему-то он перестаёт возвращать число строк, вместо этого возвращает 0. Надеюсь, понятно... (Текст задания, в первом топике)!!!

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
37
38
int TextSize(FILE *Name);
int main()
{
    FILE *Name = fopen("D:\\Name.txt", "r");
 
    cout<<"Kol-vo dtrok v file = "<<TextSize(Name);
 
    getch();
 
    return 0;
}
int TextSize(FILE *Name)
{
    const int maxlen = 80, maxstr = 10;
 
    int i,kol=0;
 
    char **str=new char *[maxstr];
 
 
    for (i = 0; i < maxstr; i++)
    {
       str[i]=new char [maxlen];
    }
 
    if(Name)
    {
       for(i=0; fgets( str[i], maxstr,Name);i++)
       {
          kol+=1;
       }
    }
 
    fclose(Name);
 
    return(kol);
 
    }
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
16.05.2009, 23:13 10
Цитата Сообщение от Tolgrim Посмотреть сообщение
если файл не существует функция возвращала -1
C++
1
if (!Name) return -1;
Добавлено через 7 минут 18 секунд
Определить размер файла
0
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 16
16.05.2009, 23:39  [ТС] 11
Пробовал вставлять в функцию
C++
1
if (!Name) return -1;
такое условие, оно работает если файл не найден, всё правильно выдаёт, но когда файл есть, почему-то
C++
1
return(kol);
перестаёт возвращать число строк, вместо этого возвращает 0.
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
16.05.2009, 23:54 12
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

попробуйте так: поидеи должно работать...

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
int TextSize(FILE *Name);
int main()
{
        FILE *Name = fopen("D:\\Name.txt", "r");
        cout << "Kol-vo dtrok v file = " << TextSize(Name);
        fclose(Name);
        getch();
        return 0;
}
 
int TextSize(FILE *Name)
{
    if (!Name) return -1;
  
    const int maxlen = 80, maxstr = 10;
    int i,kol=0;
    char **str=new char *[maxstr];
 
    for (i = 0; i < maxstr; i++)
        str[i]=new char [maxlen];
 
    for(i=0; fgets( str[i], maxstr,Name);i++)
        kol++;
 
    return kol;
}
0
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 16
17.05.2009, 00:14  [ТС] 13
Мне же нужно в случае отсутствия файла вывести сообщение

Делаю так:
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
int TextSize(FILE *Name);
int main()
{
        FILE *Name = fopen("D:\\Name.txt", "r");
 
        if(TextSize(Name) == -1){
        cout<<"File not found";
        }
        else
        {
        cout << "Kol-vo dtrok v file = " << TextSize(Name);
        }
        fclose(Name);
        getch();
        return 0;
}
 
int TextSize(FILE *Name)
{
    if (!Name) return -1;
 
    const int maxlen = 80, maxstr = 10;
    int i,kol=0;
    char **str=new char *[maxstr];
 
    for (i = 0; i < maxstr; i++)
        str[i]=new char [maxlen];
 
    for(i=0; fgets( str[i], maxstr,Name);i++)
        kol++;
 
    return kol;
}
Если файла нет всё правильно выдаёт, если есть то выдаёт - "Kol-vo dtrok v file = 0" При любом раскладе, а у меня в файле 3 строки.

А с твоим вариантом и смоим первоначальным всё правильно считает, но нужно чтоб сообщение было...
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
17.05.2009, 00:38 14
а можете нормально сказать что надо реализовать? только подсчитать кол-во строк?

просто из-за двойного вызова функции, у вас сбивается точка считывания... и получается, что при втором вызове вы считываете НОЛЬ строчек с конца файла..вам надо или перемещать на начало файла функцией fseek(), или делать так:

C++
1
2
3
4
5
6
7
8
9
    int x = TextSize(Name);
    if(x == -1)
    {
        cout<<"File not found";
    }
    else
    {
        cout << "Kol-vo dtrok v file = " << x;
    }
1
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 16
17.05.2009, 01:07  [ТС] 15
функция должна возращать либо количество строк, либо -1. Спасибо, я понял, о чём-то таком догадывался.
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
17.05.2009, 11:44 16
просто если кол-во строк, то функцию можно упростить
0
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 16
20.05.2009, 14:15  [ТС] 17
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
просто если кол-во строк, то функцию можно упростить
Как?

Добавлено через 2 часа 10 минут 53 секунды
Есть ли возможность посчитать строки в файле не выделяя память?
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
20.05.2009, 14:41 18
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

ну например вот так:
без открытия файла, строки подсчитать нельзя.

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
int TextSize(FILE *Name);
 
int main()
{
    FILE *Name = fopen("D:\\Name.txt", "r");
 
    int x = TextSize(Name);
    if(x == -1)
        cout<<"File not found" << endl;
    else
    {
        cout << "Kol-vo dtrok v file = " << x << endl;
        fclose(Name);
    }
 
    //getch();
    return 0;
}
 
int TextSize(FILE *Name)
{
        if (!Name) return -1;
        int kol=0;
        
        char str[1000];
 
        while (!feof(Name))
        {
            fgets(str, sizeof(str), Name);
            kol++;
        }
 
        return kol;
}
0
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 16
20.05.2009, 15:06  [ТС] 19
То есть количество строк будет ограничено в любом случае? В данном примере 1000 строк...
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
20.05.2009, 15:22 20
нет..в данном примере, это не кол-во строк.. а кол-во символов в строке.
т.е. принимаем, что символов в ОДНОЙ строке меньше 1000. а кол-во строк не ограничивается.
1
20.05.2009, 15:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2009, 15:22
Помогаю со студенческими работами здесь

Описать функцию DigitN(K, N) целого типа, возвращающую N-ю цифру целого положительного числа K
Описать функцию DigitN(K, N) целого типа, возвращающую N-ю цифру целого положительного числа K...

Описать функцию СОN(K,N) целого типа , возвращающую количество цифр целого положительного числа К равны N
2. Описать функцию СОN(K,N) целого типа , возвращающую количество цифр целого положительного числа...

Описать функцию getInt(Name,k) целого типа, возвращающую k-й элемент файла
очередная просьба о срочном и по максимуму простом решении этой задачи...( Описать функцию ...

Описать функцию IntFileSize целого типа, возвращающую размер файла
Доброе время суток господа! Помогите пожалуйста срочно с задачей:Описать функцию IntFileSize(Name)...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru