Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 66 из 87<  1 ... 63  64  65  66  67  68  69 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Russian
Цитата:
не совсем понял этот момент

что неясного? Вы не умеете читать произвольное кол-во байтов из файла?

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad



Партнер
 

Member
Статус: Не в сети
Регистрация: 08.05.2006
Откуда: СПБ
Rootпричем тут читать?
там написано писать

_________________
Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Russian
читать-писать - разницы нет. Только лишь названия функций разные. Ну, и плюс/минус fseek придется делать (а он, гад такой, медленный).

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 08.05.2006
Откуда: СПБ
Rootвообщем не понятно следующее
писать новую строку от начала
от какого начала?
и записать хвост,ну как я понял то что у нас в буфере то пишется после новой строки

_________________
Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Russian
Цитата:
есть у меня файл, в котором много записей
и надо заменить строку в файле на новую
вот как сделать?
пока что получается что я всю старую строку заполняю пробелами, но тогда в конце получаются пробелы если новая строка меньше старой,не есть хорошо.
вот хотел еще заполнить строку символами '\0', но строка старая в файле остается
Язык Си, компилятор gcc

смотрите, алгоритм может быть такой (в случае если каждая запись = новая строка)
1) считываем строку.
2) сравниваем с заменяемой строкой. Если пока еще не дошли - п.1. Иначе - п.3
3) считываем заменяемую строку
4) считываем "хвостик" файла.
5) в памяти преобразуем старую строку в новую.
6) пишем в файл НОВУЮ строку.
7) дописываем хвостик.
Иногда проще считать файл целиком в память и уже колдовать над образом файла в памяти. Правда, все равно без неприятных операций копирования-переноса данных в памяти не обойтись. А потом можно уже записать весь полученный массив данных на диск.

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 08.05.2006
Откуда: СПБ
Root
правильно я понял что Хвостик это все то что после заменяемой строки?
так если новая строка меньше старой, то в строке остаются старые символы
я мож щас очевидных вещей не понимаю

_________________
Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Russian
хвостик - то, что было после заменяемой строки в файле-оригинале.
Если у Вас новая строка меньше, чем старая, то, во-первых, в Си есть символ конца строки ('\0' - символ с кодом ноль, ну, или на худой конец - символ перевода '\n' и "\n\r"). Символы после игнорируются (хотя зависит от того какими ф-циями пользуетесь). А, во-вторых, Вы знаете длину новой строки и никто не мешает Вам не писать лишние байты. См. или встроенную в среду справку, или MSDN (в частности, раздел по работе со строками и с файлами)

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 08.05.2006
Откуда: СПБ
Root
пользуюсь fputs и fgеts
файл открываю в режиме "rw+"
так у меня получается что он просто тупо переписывает символы в строке,ставлю конец строки.
считывает прекрасно,но в файле остаются старые символы в старой строке

_________________
Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
добрый вечер :-)
есть класс-шаблон
Код:
template <class C> class vector
{
   C mas[SIZE];
   int number;
......
public:
template <class C> C add_negative(vector <C> a, C &s);
}

функция add_negative возвращает некоторую переменную типа С, выглядит она так
Код:
template <class C> C vector <C>::add_negative(vector <C> a, C &sym){
......
        return sym;
}

ругается, что "не удается сопоставить определение функции существующему объявлению определение 'C vector<C>::add_negative(vector<C>,C &)' существующие объявления 'C vector<C>::add_negative(vector<C>,C &)'"
подскажите пожалуйста, как тогда нужно :-)

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
template <class C> не нужно в определении метода


public:
C add_negative(vector <C> a, C &s);


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
progn, спасибо :-)

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Здравствуйте! Подскажите пожалуйста, можно ли как-либо заполнить динамический массив, не зная заранее кол-во элементов? (элементы массива-символы строки (char) ,память под которые должна выделяться динамически)
Спасибо))
:oops:


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
для динамических массивов нужно использовать std::vector

а для new char[N] никак не узнать его размер, если передовать просто его указатель


 

Member
Статус: Не в сети
Регистрация: 24.06.2008
RouletMourlette писал(а):
Здравствуйте! Подскажите пожалуйста, можно ли как-либо заполнить динамический массив, не зная заранее кол-во элементов? (элементы массива-символы строки (char) ,память под которые должна выделяться динамически)

memset(pointer,value,size);


 

Member
Статус: Не в сети
Регистрация: 09.03.2007
Откуда: ~5km от Москвы
Привет Оверам)

Задание такое должно быть: есть мини бд (все делается в win32 console) структура поезд, нужно забить 8 поездов (3 пункта у поезда(место отправления, время отправления, номер поезда).

Нужно сделать чтобы сортировалось по пункту назначения

Тут реализовал структуру , сначала вводим данные, потом все введеное выводится:

Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
   struct train
   {
      char Point[20]; //пункт назначения point
      char Number[20]; // номер поезда number
      char Time[20]; //время отправления time
      //int gr;
   };
   
   train a[8];
   
   
   //ввод////////////////////////////////////////////////////////

for (int i=0;i<4;i++)
{
   
   cout<<"BBediTe nomer poezda"<<i+1<<" \n";
   cin>>a[i].Number;

   cout<<"BBediTe punkt naznacheniya\n";
   cin>>a[i].Point;

   cout<<"BBediTe vremya otpravleniya\n";
   cin>>a[i].Time;
   cout<<"\n _____________________________\n"; //для разделения
}


   //вывод////////////////////////////////////////////////////////
cout<<"\n Structura Train: \n";
for (int i=0;i<4;i++)
{
   
   cout<<"\n nomer poezda ";
   cout<<a[i].Number;

   cout<<"\n punkt naznacheniya ";
   cout<<a[i].Point;

   
   cout<<"\n vremya otpravleniya ";
   cout<<a[i].Time;
   cout<<"\n _____________________________\n"; //для разделения
}
   _getch();

   return 0;
}


Помогите пожалуйста, хотя бы как делать, ну или ..)


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
Romi4
Код:
#include <vector>
#include <string>
#include <algorithm>

struct Train
{
    string Point; //пункт назначения
    string Number; // номер поезда
    string Time; //время отправления
};

bool operator < (const Train &t1, const Train &t2)
{
   return t1.Point < t2.Point;
}

...

 vector<Train> trains;

....

const int num_rec = 8;

for(int i = 0; i < num_rec; ++i)
{
    Train cur_train;

...
    cin >> cur_train.Point;
...

    trains.push_back(cur_trian);   
}

 sort(trains.begin(), trains.end());

...


 

Member
Статус: Не в сети
Регистрация: 10.12.2007
Откуда: Санкт-Петербург
Здравствуйте!
Вот, собственно алгоритм, который по идее должен быть реализован, но чего-то где-то ошибка
#77
Обрабатывается массив p_Q[deg][deg]
Код:
int * c = new int [deg];
   int i, j, r, k, flag, p;
   flag=0;
   r=0;
   for (i=0; i<deg; i++)
      c[i]=-1;
   for (k=0; k<deg; k++){
         for (j=0; j<deg; j++){
            if (this->p_Q[k][j]!=0 && c[j]<0){
               flag++;
               if (flag)
                  break;
            }
            if (flag){
               for (i=0; i< deg; i++)
                  this->p_Q[i][j]*=(-1/(this->p_Q[k][j]));
               for (i=0; i<deg; i++)
                  for(p=0; p<deg; p++)
                     if (i!=j)
                        this->p_Q[p][i]+=this->p_Q[p][j]*this->p_Q[k][i];
               c[j]=k;
            }
         }
         flag=0;
      }

Спасибо

Добавлено спустя 1 час 38 минут 40 секунд:
есть вариант так, но это не лучше прежнего :haha:
Код:
int * c = new int [deg];
   int i, j, r, k, flag, p;
   flag=0;
   r=0;
   for (i=0; i<deg; i++)
      c[i]=-1;
   for (k=0; k<deg; k++){
         for (j=0; j<deg; j++){
            if (this->p_Q[k][j]!=0 && c[j]<0){
               flag++;
               if (flag)
                  break;
            }
            if (flag){
               for (i=0; i< deg; i++)
                  this->p_Q[i][j]*=(-1/(this->p_Q[k][j]));
            for (i=0; i<deg; i++)
               if (i!=j)
                  this->p_Q[i][j]*=this->p_Q[k][i];
            for (p=0; p<deg; p++)
               for (i=0; i<deg; i++)
                  if (i!=j)
                     this->p_Q[p][i]+=this->p_Q[p][j];
               c[j]=k;
            }
         }
         flag=0;
      }

_________________
Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах...
DCN - наше все


 

Member
Статус: Не в сети
Регистрация: 11.01.2009
Всем привет!

Написал такой простой код(Язык Си, компилятор Borland C++ 3.1, графический режим):

Цитата:
while(!kbhit())
{
str=timer();
outtextxy(100,100,str);
}
c=getch();


Смысл кода в том, что пока не нажата клавиша, на экран выводятся данные получаемы от функции timer() в виде строки.

Проблема в том, что выводы outtextxy(100,100,str) накладываются друг на друга. Прошу объяснить, каким образом сделать, чтобы следующий вывод outtextxy(100,100,str) удалял текст от предыдущего.
Побывал закрашивать текст функцией bar(), но это не выход, так как тогда надпись очень быстро мерцает.


 

Member
Статус: Не в сети
Регистрация: 10.12.2003
tolikrog писал(а):
Проблема в том, что выводы outtextxy(100,100,str) накладываются друг на друга. Прошу объяснить, каким образом сделать, чтобы следующий вывод outtextxy(100,100,str) удалял текст от предыдущего.
Побывал закрашивать текст функцией bar(), но это не выход, так как тогда надпись очень быстро мерцает.

А где писал bar? До или после outtextxy? По идее надо ДО. Если все равно мерцает, то может тогда сделать паузу (вроде это делается через функцию delay) после outtextxy, например на секунду.
Еще можно попробовать перед outtextxy(100,100,str) выводить предыдущий текст цветом фона. Т.е., напимер:
Код:
setcolor(0);
outtextxy(100,100,prev_str);
setcolor(15);
outtextxy(100,100,str);
prev_str = str;

Незнаю, будут мерцания или нет.


 

Member
Статус: Не в сети
Регистрация: 01.05.2007
Откуда: Тель-Авив
Фото: 1
theone писал(а):
Побывал закрашивать текст функцией bar(), но это не выход, так как тогда надпись очень быстро мерцает.

Код:
   
void vsync()
   {
      /* wait until any previous retrace has ended */
      do {
      } while (inportb(0x3DA) & 8);

      /* wait until a new retrace has just begun */
      do {
      } while (!(inportb(0x3DA) & 8));
   }

Вызывать перед закрашиванием.
Дополнительная информация доступна в поисковиках по ключевым словам "Vertical retrace" и "обратный ход луча".


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 66 из 87<  1 ... 63  64  65  66  67  68  69 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan