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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Файлы 
:(
    Опции темы
shokky
Дата 23.3.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Желаю всем здравствовать  smile ...
У меня к вам огромаднейшая просьба о ПОМОЩИ... smile ...я соовсем ничего не понимаю в файлах и тем более на С++... smile а мне задали сделать аш три задачи... smile ...просю вас не дайте мне погибнуть смертью храбрых, незнающих программирование людей... smile ...
Задания такие:
1. Записать в файл N произвольных натуральных чисел. Переписать в другой файл последовательного доступа те элементы, которые кратны K. Вывести полученный файл на печать.
2. Дан файл Т, который содержит номера телефонов сотрудников учреждения: указывается фамилия, инициалы и номер телефона. Найти номер телефона сотрудника по его фамилии и инициалам. 
3. Дан файл, содержащий текст на русском языке. Определить, сколько раз встречается в нем самое длинное слово. 

Буду безгранично благодарна всем, кто хоть чем-нибудь поможет.... smile 

M
Kuvaldis
На будущее: пожалуйста, один топик - один вопрос (задача) 


Это сообщение отредактировал(а) Kuvaldis - 24.3.2007, 11:42
PM MAIL   Вверх
apook
Дата 24.3.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

#include<conio.h>
#include<iomanip.h>
#include<fstream.h>
#include<stdlib.h>

div_t x;

void main()
{
int i, j, N=0, K=0;
char miss[  ][ 20 ]={
    " Кол-во чисел ",
    " Делитель "
    };

fstream f, fD;
f.open( "data.txt", ios::out );
fD.open( "dummy.txt", ios::out );
if( !f || !fD )
{
    cout << "Ошибка открытия файла : " << "data.txt или dummy.txt" << endl;
    exit( 1 );
    }

f.seekp( 0, ios::beg );
for( i=0; N==0 || K==0; )
{
    clrscr();
    cout << "Введите данные (" << miss[ i ] << "): ";

    if( i==0 )
    {
        if( (cin >> N)>0 ) ++i;
        } 
    else
        cin >> K; 
    }

fD << "   Число  | делитель |  частное |  остаток " << endl
   << "-------------------------------------------" << endl;

for( i=1; i<=N; ++i )
{
    f << setw( 3 ) << i;
    x=div( i, K );
    if( x.rem==0 )
        fD << setw( 8 ) << i << "  |" << setw( 8 ) << K  << "  |"
           << setw( 8 ) << x.quot << "  |" << setw( 8 ) << x.rem << endl;
    }

f.close();
fD.close();
return;
}


Код

#include<conio.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>


void main()
{
int i, j;
char Lname[ 100 ], Phone[ 20 ], opt[ 100 ];

fstream T;
T.open( "info.txt", ios::in );

if( !T )
{
    cout << "Ошибка открытия файла : " << "info.txt" << endl;
    exit( 1 );
    }

cout << "Введите Фамилию и инициалы :";
cin.get( opt, 100 );

T.seekp( 0, ios::beg );
for( ; !T.eof(); )
{
    T >> Lname >> Phone;
    if( stricmp( Lname, opt )==0 )
    {
        cout << Phone;
        break;
        }
    else
        memset( Lname, NULL, strlen(Lname) );
    }
getch();
T.close();
return;
}


Код

#include<conio.h>
#include<fstream.h>
#include<iomanip.h>
#include<string.h>
#include<stdlib.h>


void main()
{
int i, j, c, numstr=0, over=0;
char buf[ 100 ];
fstream f;
f.open( "long.txt", ios::in );

if( !f )
{
    cout << "Ошибка открытия файла : " << "info.txt" << endl;
    exit( 1 );
    }

f.seekp( 0, ios::beg );

for( ; !f.eof(); )
{
    f.getline( buf, 100 );
    if( strlen(buf) >0 ) ++numstr; // строки
    else continue;

    for( i=0, j=0; i<=strlen(buf); ++i, ++j )
    {
        if( buf[ i ]==' ' || buf[ i ]=='\t'
        || buf[ i ]=='\n' || buf[ i ]=='\0' )
        {

            for( ; i<=strlen(buf) && (buf[ i ] ==' ' || buf[ i ]=='\t'); ++i );
            if( j>over )
                over=j; // длина самого длинного слова
            j=0;
            }          
        }
    }

f.clear();
f.seekp( 0, ios::beg );
for( c=0; !f.eof(); )
{
    f.getline( buf, 100 );
    if( strlen(buf)==over ) ++c;
    }

cout << "Самое длинное слово в файле встречается " << c << " раз!" << endl;
getch();

f.close();
return;
}



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
shokky
Дата 24.3.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



apook,  smile спасибо...просто спасибище...классно smile ...жаль только не могу оценить в полной мере работу програмок smile ...у меня не работает вторая и третья задача  smile ...вернее они работают но неправильно...
-вторая задача не выдает телефон smile ...ей пишешь фамилию из списка, а она не выдает телефон smile 
-третья задача выдает, что в строке самое длинное слово встречается 0 раз smile 

помогите пожалуйста с этими непонятками разобраться  smile ...и еще одна просьбочка не могли бы Вы закоментировать свой код...пожалейте пожалуйста бедную ничего в Файла на С++ не понимающую девушку smile 
PM MAIL   Вверх
apook
Дата 25.3.2007, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

вторая задача не выдает телефон

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

Aze.Y.D 45-55-98
Agr.S.U 46-55-98
Bza.R.T 47-55-98
Bin.B.B 48-55-98
Cccc.A.A 49-55-98
Cva.E.P 40-56-98
Dzo.E.O 41-57-98
Dio.K.Y 42-58-98
Joo.H.R 43-59-98

т.е Фамилия и инициалы без пробела а через пробел телефон
кстати телефон должен обязательно быть иначе туда занесется
всякий хлам(я имею ввиду переменную Phone)

Цитата

третья задача выдает, что в строке самое длинное слово встречается 0 раз

Это была недоработка действительно, проблема в следующем самую длинную строку
программа определяла только если она без пробела, а потом по ней может опреде
лить все строки такой длинны(даже содержащие пробелы ). глюк smile.

Чтоб исправить надо в 31 строчке
Код

        if( /*buf[ i ]==' ' || buf[ i ]=='\t' //<- удалить то что между /* */ и их тоже
        || */buf[ i ]=='\n' || buf[ i ]=='\0' )
        {

            for( ; i<=strlen(buf) && (buf[ i ] ==' ' || buf[ i ]=='\t'); ++i );
            if( j>over )
                over=j; // длина самого длинного слова // ведь искать надо строку
            j=0;
            } 


удалить следующее
Код

buf[ i ]==' ' || buf[ i ]=='\t'
 ||



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
shokky
Дата 25.3.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



apook, спасибо  smile ...только вот третья задача у меня по прежнему выдает "Самое длинное слово встречается в строке 0 раз"   smile  
может я в файле что-то не так написала... smile там у меня "kkkkkkkkkkkk hgjyuth dgfhru kkkkkkkkkkkk hgirowj"...  
а еще...ты бы не мог посмотреть...вот во второй задачке как сделать так чтобы если такой как мы ввели в строке фамилии не было в списке програмка выдавала "Такого человека в списке нет!"...
я вот так сделала теперь он у меня это пишет столько же раз сколько и человек в моем списке...   smile 

Код

#include<conio.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>


void main()
{
int i, j;
char Lname[ 100 ], Phone[ 20 ], opt[ 100 ];

fstream T;
T.open( "info.txt", ios::in );
clrscr;
if( !T )
{
    cout << "Oshibka otkritia faila : " << "info.txt" << endl;
    getch();
    exit( 1 );
    }

cout <<endl<< "Vvedite familiy i iniciali :"<<endl;
cin.get( opt, 100 );

T.seekp( 0, ios::beg );
for( ; !T.eof(); )
{
    T >> Lname >> Phone;
    if( stricmp( Lname, opt )==0 )
    {
    cout << Phone;
    break;
    }
    else
    cout<<endl<< "Takogo cheloveka v spiske net!"<<endl;
    memset( Lname, NULL, strlen(Lname) );
    }
getch();
T.close();
return;
} 
  


а еще почему то не работает clrscr   ...может я его где-то не там поставила  smile  

вот третья задача как я исправила как ты сказал...вдруг я что-то не так наисправляла....  smile 
Код

#include<conio.h>
#include<fstream.h>
#include<iomanip.h>
#include<string.h>
#include<stdlib.h>


void main()
{
int i, j, c, numstr=0, over=0;
char buf[ 100 ];
fstream f;
f.open( "long.txt", ios::in );

if( !f )
{
    cout << "Ohibka otkritia faila : " << "long.txt" << endl;
    getch();
    exit( 1 );
    }

f.seekp( 0, ios::beg );

for( ; !f.eof(); )
{
    f.getline( buf, 100 );
    if( strlen(buf) >0 ) ++numstr; // stroki
    else continue;

    for( i=0, j=0; i<=strlen(buf); ++i, ++j )
    {
      buf[ i ]=='\n' || buf[ i ]=='\0';
    {

        for( ; i<=strlen(buf) && (buf[ i ] ==' ' || buf[ i ]=='\t'); ++i );
        if( j>over )
        over=j; // dlina samogo dlinnogo slova
        j=0;
        }
    }
    }

f.clear();
f.seekp( 0, ios::beg );
for( c=0; !f.eof(); )
{
    f.getline( buf, 100 );
    if( strlen(buf)==over ) ++c;
    }

cout << "Samoe dlinnoe slovo vstrechaetsa v faile " << c << " raz!" << endl;
getch();

f.close();
return;
} 
 


посмотри пожалуйста...  smile 

PM MAIL   Вверх
apook
Дата 25.3.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

теперь он у меня это пишет столько же раз сколько и человек в моем списке... 

Фактически то что ты добавила надо поменять на текст:
 Familija kotoruy vi vveli ne sovpala s familiei kotoraja seichas proverjaetsja
и так будет столько раз сколько раз не совпадет 
Цитата

Код

if( strlen(Lname)==0 ) cout << "Этого человека нет в списке : " << opt;

поставь это в конце кода перед getch();
может я его где-то не там поставила 

Попробуй поставить в другое место smile
Цитата

вдруг я что-то не так наисправляла....  

Код

buf[ i ]=='\n' || buf[ i ]=='\0';

это что-за интересная строчка, а где if
Код

if( buf[ i ]=='\n' || buf[ i ]=='\0' )
{
    for( ; i<=strlen(buf) && (buf[ i ] ==' ' || buf[ i ]=='\t'); ++i );
    if( j>over )
        over=j; // dlina samogo dlinnogo slova
    j=0;
    }


Это сообщение отредактировал(а) apook - 25.3.2007, 13:07


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
shokky
Дата 25.3.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



apook, еще раз мерсибо тебе  smile ...но третья задача опять пишет что "Самое длинное слово встречается в строке 0 раз" smile ...что с этим делать?  smile ...
и apook ПОЖАЛУЙСТА прокомментируй свой код в задачах...я там почти ничего не понимаю...особенно что делают циклы и что значит то что у них в скобках написано... smile 
вот например в 1 задаче:
Код

#include<conio.h>
#include<iomanip.h>
#include<fstream.h>
#include<stdlib.h>

div_t x;        //что это?

void main()
{
int i, j, N=0, K=0;
char miss[  ][ 20 ]={               //что это?
    " Кол-во чисел ",
    " Делитель "
    };

fstream f, fD;
f.open( "data.txt", ios::out );
fD.open( "dummy.txt", ios::out );
if( !f || !fD )
{
    cout << "Ошибка открытия файла : " << "data.txt или dummy.txt" << endl;
    exit( 1 );
    }

f.seekp( 0, ios::beg );
for( i=0; N==0 || K==0; )
{
    clrscr();
    cout << "Введите данные (" << miss[ i ] << "): ";

    if( i==0 )
    {
        if( (cin >> N)>0 ) ++i;
        } 
    else
        cin >> K; 
    }

fD << "   Число  | делитель |  частное |  остаток " << endl
   << "-------------------------------------------" << endl;

for( i=1; i<=N; ++i )
{
    f << setw( 3 ) << i;
    x=div( i, K );             //это значит деление без остатка?
    if( x.rem==0 )       //что значит x.rem?
        fD << setw( 8 ) << i << "  |" << setw( 8 ) << K  << "  |"
           << setw( 8 ) << x.quot << "  |" << setw( 8 ) << x.rem << endl;   //что значит x.quot?
    }

f.close();
fD.close();
return;
}


во 2:
Код

#include<conio.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>


void main()
{
int i, j;
char Lname[ 100 ], Phone[ 20 ], opt[ 100 ];

fstream T;
T.open( "info.txt", ios::in );
clrscr;
if( !T )
{
    cout << "Oshibka otkritia faila : " << "info.txt" << endl;
    getch();
    exit( 1 );
    }

cout <<endl<< "Vvedite familiy i iniciali :"<<endl;
cin.get( opt, 100 );

T.seekp( 0, ios::beg );
for( ; !T.eof(); )
{
    T >> Lname >> Phone;
    if( stricmp( Lname, opt )==0 )
    {
    cout << Phone;
    break;
    }
    else
    memset( Lname, NULL, strlen(Lname) );   //что это значит?
    }
if( strlen(Lname)==0 ) cout << "Etogo cheloveka v spiske net : " << opt;
getch();
T.close();
return;
}


в 3 задаче...ну...непонятно почему она не работает и ...
Код

#include<conio.h>
#include<fstream.h>
#include<iomanip.h>
#include<string.h>
#include<stdlib.h>


void main()
{
int i, j, c, numstr=0, over=0;
char buf[ 100 ];
fstream f;
f.open( "long.txt", ios::in );

if( !f )
{
    cout << "Ohibka otkritia faila : " << "long.txt" << endl;
    getch();
    exit( 1 );
    }

f.seekp( 0, ios::beg );

for( ; !f.eof(); )           //что делает этот цикл и как расшифровать то что в скобках?
{
    f.getline( buf, 100 );
    if( strlen(buf) >0 ) ++numstr; // stroki
    else continue;

    for( i=0, j=0; i<=strlen(buf); ++i, ++j )      //что делает этот цикл?
    {
     if (buf[ i ]=='\n' || buf[ i ]=='\0');
    {

        for( ; i<=strlen(buf) && (buf[ i ] ==' ' || buf[ i ]=='\t'); ++i );      //что делается в этом?
        if( j>over )
        over=j; // dlina samogo dlinnogo slova
        j=0;
        }
    }                                                        
    }

f.clear();
f.seekp( 0, ios::beg );
for( c=0; !f.eof(); )          //а тут что делается?
{
    f.getline( buf, 100 );
    if( strlen(buf)==over ) ++c;
    }

cout << "Samoe dlinnoe slovo vstrechaetsa v faile " << c << " raz!" << endl;
getch();

f.close();
return;
}


ОООчень надеюсь на твою помощь... smile ...очень тебе благодарна smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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