Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Посчёт числа вхождений в файл каждой из букв, и вывод результата в табличной форме 
V
    Опции темы
Alenka
Дата 24.9.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



Дан символьный файл. Подсчитать число вхождений в файл каждой из букв a, b, c, d, e, f и вывести результат в табличной форме.
Спасите. Посдедние две программки осталось написать...

Добавлено @ 18:07 
На экран вывести исходный файл (а также преобразованный, если такой требуется получить по заданию). Имена необходимых для работы файлов должны задаваться в командной строке при вызове программы. 
PM   Вверх
Friackazoid
Дата 24.9.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: 1
Всего: 3



ПЕРВЫЙНАХ  smile  smile 

Код

#include <stdio.h>

int _tmain(char *argc)
{
         int mas[6];//в эл-тах этого массива храним кол-во букв
    char ch='\0';
    FILE *fp=fopen(argc,"r");
    if (fp!=NULL)
    {
        printf("%c",ch);
        while (feof(fp)==0)
        {
            ch=fgetc(fp);
            printf("%c",ch);
            if (int(ch)>=97 && int(ch)<=102)
                mas[102-int(ch)]++; //только нужно чтоб изначально в эл-тах массива был 0
        }
        printf("%c",'\n');
        for (int i=0; i<6; i++)
            printf("%c %c %d %c",char(97+i),'=',mas[5-i],'\n');
    }
    else printf("File not found");
    ch=getc(stdin);
    return 0;
}


  smile  вона как извратиться можно

Это сообщение отредактировал(а) Friackazoid - 24.9.2006, 23:01
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
Oleg_Ci
Дата 24.9.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Цитата
На экран вывести исходный файл (а также преобразованный, если такой требуется получить по заданию).
Программа создаёт один файл без каких-либо требований
Код

#include <stdio.h>

int main( int argc, char * argv[] )    
{
    if ( argc < 3 )  // если аргументов меньше 3
    {
        printf("\nError file name\nPress key to exit");
        return 1;
    }
    FILE *fin, *fout;
    fin = fopen( argv[1], "r" );  // превый файл для чтения
    fout = fopen( argv[2], "w" );  // второй файл для записи результата
    if ( !fin || !fout )  // если файлы не созданы
    {
        printf("\n\nError file open  %s  %s\nPress key to exit", argv[1], argv[2] );
        return 1;
    }
    char c;
    int count[ 6 ], i;
    for ( i=0; i<6; i++ )
        count[i] = 0;

    putchar( '\n' );
    while (( c = fgetc( fin )) != EOF )
    {
        putchar( c );
        if ( c >= 'a' && c <= 'f' )
            count[ c - 'a' ]++;
    }
    printf( "\n\ncumbol  count\n" );
    fprintf( fout,"cumbol  count\n" );
    for ( i=0; i<6; i++ )
    {
        printf("    %c       %d\n", i + 'a', count[i] );
        fprintf( fout, "    %c       %d\n", i + 'a', count[i] );
    }
    fclose( fin );
    fclose( fout );
    return 0;
}
Блин, опередили, пока писал...
PM MAIL   Вверх
darkart
Дата 24.9.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Да уж опередили дважды, с примером
Код

#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX_LENGTH 255 //максимальная длина строки
#define MAX_SYMBOLS 6 //максимальное кол-во символов
int main(int argc, char*argv[])
{
    int counts[MAX_SYMBOLS];//массив счетчиков
    char strFileName[MAX_LENGTH+1];//массив для хранения имени файла
    FILE* f;//файловая переменная
    char ch;//вспомогательная переменная для чтения
    //инициализация счетчиков
    for(int i=0;i<MAX_SYMBOLS;i++)
        counts[i]=0;
    //если параметров ком. строки <2, то даем возможность ввести имя файла
    if(argc<2)
    {
        printf("You must enter a file name:\n");
        gets(strFileName);//читаем имя файла
    }
    else
    {
        strcpy(strFileName,argv[1]);//копируем 2 параметр строки в имя файла
    }
    f=fopen(strFileName,"r");//открываем файл для чтения
    printf("Source file:\n");
    while(!feof(f))//пока не конец файла
    {
        int ierr=fscanf(f,"%c",&ch);//узнаем результат прочтения
        printf("%c",ch);//печатаем очередной прочитанный символ
        if(ierr&&ierr!=EOF)//если прочли>0 и не конец файла
        {
            switch(ch)//выбор прочитанного
            {
            case 'a':
            case 'b':
            case 'c':
            case 'd':
            case 'e':
            case 'f':
                {
                    //если ch рвно a,b,c,d,e или f
                    counts[ch-'a']++;//увеличиваем счетчик для каждого символа
                    break;
                }
            }
        }

    }
    fclose(f);//закрываем файл
    printf("\nResults:\n");
    //выводим результаты
    for(i=0;i<MAX_SYMBOLS;i++)
        printf("%c - %d\n",'a'+i,counts[i]);
    getch();//ждем ввода
    return 0;
}


Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  Alenka_files.rar 44,68 Kb
PM MAIL WWW ICQ Skype GTalk   Вверх
MAKCim
Дата 24.9.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



Код

#include <stdio.h>

int count(int* symb, const char* path)
{
    FILE* fs=fopen(path,"r");
    if (fs==NULL) return -1;
    char memory[1024];
    size_t size;
    while ((size=fread(memory,sizeof(char),1024,fs))>0)
        while (size--) ++symb[memory[size]];
    fclose(fs);
}

int main(int argc, char* argv[])
{
    if (argc!=2) return 0;
    int array[256]={0};
    if (count(array,argv[1])==-1)
        return 1;
    printf(
        "a=%d\nb=%d\nc=%d\nd=%d\ne=%d\nf=%d",
        array['a'],
        array['b'],
        array['c'],
        array['d'],
        array['e'],
        array['f']
    );
    return 0;
}


Добавлено @ 20:36 
опередили трижды  smile 
(шутка)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alenka
Дата 25.9.2006, 05:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



СПАСИБО, ребята  smile   smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.