Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Работа с файлами


Автор: FOLGA 19.11.2007, 07:37
Помогите пожалуйста с решением:

1.Файл number1.txt заполнить случайными целыми числами, принадлежащими диапазону от -100 до 100. Количество чисел в файле задается с клавиатуры. Количество чисел в каждой строке является произвольным числом из диапазона от 0 до 10 и задается с помощью функции random или rand. Вывести числа на консоль, сохранив разбиение на строки, соответствующее файлу number1.txt
Подсчитать сумму отрицательных элементов файла number1.txt. Все отрицательные элементы вывести в файл number3.txt и на консоль. В конец файла number2.txt добавить слова "Result = " и найденную сумму, вывести полученный результат на консоль.

2.С помощью текстового редактора создать файл text1.txt и заполнить словами из латинских букв (не менее 30 слов). Все отрицательные элементы вывести в файл number3.txt и на консоль. В конец файла number2.txt добавить слова "Result = " и найденную сумму, вывести полученный результат на консоль.

Автор: under_sun 19.11.2007, 16:20
Цитата(FOLGA @  19.11.2007,  07:37 Найти цитируемый пост)
С помощью текстового редактора создать файл text1.txt и заполнить словами из латинских букв (не менее 30 слов). 

Я не понял, это просто такое упражнение для пальцев что ли  smile 

Автор: FOLGA 21.11.2007, 21:28
Сорри, не то написала, там надо в текстовом файле слова по алфавиту расставить и на консоль вывести. smile 

Автор: Rekah 21.11.2007, 22:51
По первой задаче: Проверку на "козяобразность" вводов юзера надо производить (допускать ввод толькочисел)? Числа чем отделены друг от друга? Если очень очень надо сделаю, но к завтра, и если время будет smile

Автор: under_sun 22.11.2007, 00:32
Цитата(FOLGA @  21.11.2007,  21:28 Найти цитируемый пост)
Сорри, не то написала, там надо в текстовом файле слова по алфавиту расставить и на консоль вывести.

Ну вот, теперь понятно.
Не знаю, знакома ли ты с STL... Может появится желание освоить smile 
Код

#include <fstream>
#include <iostream>
#include <string>
#include <set>

using namespace std;

int main()
{
     ifstream fin("text.txt");
     string word;
     set<string> words;         //то же самое, что set<string, less<string> >, т.е. в этом множестве
                                //будут храниться отсортированные по возрастанию строки
                                //если хочешь в обратном порядке, пиши set<string, greater<string> >
     set<string>::iterator it;  //аналогично с итератором set<string, less<string> >::iterator
    
     while(fin >> word)
          words.insert(word);

     for (it = words.begin(); it != words.end(); it++)
          cout << *it << endl;
    
     return 0;
}

Автор: FOLGA 22.11.2007, 13:58
Rekah, проверку делать не надо, а числа пробелом отделять, если не трудно, попробуй сделать, плиз, это в принципе до след недели подождет...

Добавлено через 5 минут и 10 секунд
under_sun, спасиб!  smile 

Автор: GIK 22.11.2007, 14:19
Цитата

Rekah, проверку делать не надо, а числа пробелом отделять, если не трудно, попробуй сделать, плиз, это в принципе до след недели подождет...


Rekah - мой друг smile , я ему передам и помогу. В принципе я сделал кое что, но сразу скажу сложный алгоритм, препод тебе поверит если что?  smile 
На конвертацию числа, вото такой отрывок:

Код

  for(k=0; k<3; k++){
    for(i=0;i<10;i++) //Предполагаем что символов не менее 10 (из них что-то числа)
    {
      from.get(ch); //Считываем первый знак
      if(ch=='-')
       {
         //Нашли отрицательное число
         while(ch!=',')
         {
           from.get(ch);
            if(ch!=',')
             buf_for_ch[dl_ch]=(ch-48); 
             dl_ch++; //
         }
           dl_ch--; //в итоге получаем, индекс крайнего эллемента И степень возведения первого числа!!! 

         //a oaia?u aicaiaei ?enei a noaiaiu
           while(v_pered!=dl_ch) //eiaaen no?aieoiy e eiioo ?enea (ianneaa), ii ia aie?ai aieoe ai eiioa, o.e. iineaaiaa neei ia aicaiaeony!!! (neeaauaaaony n eoiaii!!!)
           {
              //aicaiaei ?enei a noaiaiu ia?eiay n eiioa ?enea
              ran+= buf_for_ch[v_pered] * pow(10, buf_dl_ch);
              buf_dl_ch--; //oiaiuoaai noaiaiu aicaaaiey
              v_pered++; //i?iaaeaaainy aaeuoa
            }
           //Inoaeinu i?inoi nei?eou iineaaiee yeeaiaio ianneaa
           otr_ch[k][i]=ran+buf_for_ch[v_pered];
       }
      //Ia?aeuiua aaiiua 
      dl_ch=0;
      ran=0;
      v_pered=0;
      getch();
    }

  }

Пойдет? smile
Если да, то надо понять принцыпы. Вобщем смотри, в файле находятся сомволы (не числа), ты считываешь символы и конвертишь их в число, число собирается в массив, чтобы собрать из отдельных чисел одно, я каждое число умножаю на степень длины числа  n минус 1.
Пример:
Массив nums[3]={2,5,7}; состоит из трех чисел.(предполагаемое число 257) берем первое число и умножаем на 10 в степень (3-1), получаем 200, фиксируем его в перемепнной ran+=200; Далее число 5 умножаем на 10 в степени 3-2, получаем 50, и соответственно 200+50 = 250. И последнее число, которое возводить не надо, а просто прибавить. Все число готово. Очень просто если один раз понять, советую smile

Добавлено через 1 минуту и 7 секунд
Вкуривай пока, если что помогу smile 

Автор: under_sun 22.11.2007, 20:58
GIK, зачем такие сложности с конвертацией? Можно использовать 
Код

int atoi(const char* str)

Автор: GIK 23.11.2007, 09:23
Цитата

GIK, зачем такие сложности с конвертацией? Можно использовать 

Согласен, но так ведь круче smile Хотя для начинающих лучше использовать atoi  smile 

Автор: FOLGA 23.11.2007, 10:34
GIK, Даааа, мощно, очень мощно, я бы никогда не додумалась до такого, хотя у нас что то в этом роде было в прошлом году, а вот atoi у меня почему то не работает... 

Автор: GIK 23.11.2007, 10:43
Цитата

 а вот atoi у меня почему то не работает... 

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

Добавлено через 2 минуты и 9 секунд
Ну принцип то тебе понятен? это самое главное, и поможет тебе в будующем smile 

Автор: FOLGA 24.11.2007, 14:50
GIK,с алгоритмом я разобралась, только мне никто не поверит, что я сама такое сделала... хотя попробовать конечно можно... может и прокатит...  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)