Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: kotlomoy
Дата сообщения: 17.04.2012 00:56
Mantikor123
Связный список
Автор: bomzzz
Дата сообщения: 17.04.2012 02:10
В информатике, свя́зный спи́сок

dimon0476
зависит от базового уровня
Автор: Mantikor123
Дата сообщения: 17.04.2012 13:52
kotlomoy
читал не понял кроме того что это напоминает стек.... но как с ним работать((( причем в С++ хз....
лан будем счас методом тыка изучать...

Добавлено:
наверно я все таки ***. но вот попробывал.... и на выходе вроде как и правильно но какой-то бред все равно....

Код: #include <iostream.h>
#include <conio.h>


int main(){


int A[6]={1,7,5,8,15,30};
struct c {
int n;
    c *prev;
    c *next;
};

c *begin = NULL;
c *last = NULL;
c *list = NULL;

for (int i=0; i<6; i++)
    { if (begin == NULL)
        { last = new c;
            begin = last;
            last->n = A[i];
            last->prev = NULL;
            last->next = NULL;
            list = last; }
     else { last = new c;
            list->next = last;
            last->n = A[i];
            last->prev = list;
            last->next = NULL;
            list = last;}
    }





/*
c *current = begin;
cout<<"Vuvod";
while(current) {
    cout<<'\n' <<current->n;
     current = current->next; } */
cout<<'\n' ;
cout<<"Sortirovka"<<'\n';
c *current = begin;    
while(current) {
    cout<<'while' ;            
if (list->n>last->n) {
current = current->next; cout<<"sort"; }
else {cout<<"ne sort"; break; }
}

    
getch();
}
Автор: kotlomoy
Дата сообщения: 17.04.2012 19:22
Mantikor123

c *begin = NULL; - указатель на первый элемент списка
c *last = NULL; - указатель на последний элемент списка
c *list = NULL; - временный указатель для заполнения списка

c *current = begin; - берем первый элемент списка
if (list->n>last->n) - бредятина (сравниваем то, на что последний раз указывал временный указатель list, т.е последний элемент списка, с последним элементом списка - последний элемент равен самому себе, поэтому условие никогда не выполнится)
current = current->next; - берем следующий элемент списка
Автор: Mantikor123
Дата сообщения: 17.04.2012 20:08
согласен бред собственно в конце я про это и написал....
но тогда как?
c *current = begin;    
while(current) {
    cout<<'while';            

if (begin->n>current->n) {     // if (begin->n>current->next) {

cout<<"sort"; }
else {cout<<"ne sort"; break; }
}
так?
но снова таки бред выдает(( может уж конкретно скажите как должно быть? ибо видно что понимаете...))
Автор: kotlomoy
Дата сообщения: 17.04.2012 20:46
Mantikor123
Сделать два указателя и, начиная с первого элемента списка, брать пары элементов и сравнивать между собой.

c * elem1 = begin;
c * elem2 = begin->next;

while (elem2 && elem1->n > elem2->n )
{
elem1 = elem2;
elem2 = elem2->next;
}

if (elem2)
cout<<"ne sort";
else
cout<<"sort";
Автор: Eminence
Дата сообщения: 18.04.2012 07:08

Цитата:
да еще вопрос какая разница между int main() и void main()
в примере указан void main() и пока на int не сменил не запускалась программа...

Компиллятор воспринимает их как две разные функции. Загрузчик при запуске ищет функцию с прототипом int main(), которая является точкой входа. Если он ее не нашел, то, естественно, программа не запустится
Автор: Mantikor123
Дата сообщения: 18.04.2012 08:46
kotlomoy спасибо большое. теперь дошло как с ним работать нужно... ибо уже хотел с о списка обратно в масив загонять...

Eminence тесть int main() это что то Begin если брать тот же паскаль? но тогда для меня загадка почему больше половины примеров в интернете да и в книгах начинается с void main();
Автор: Eminence
Дата сообщения: 18.04.2012 19:08
Mantikor123, что-то вроде того, но загрузчики в C и Pascal работают по-разному. А насчет примеров в интернете и в книгах - все зависит от используемой RunTime библиотеки и особенностей компиллятора
Автор: gygant
Дата сообщения: 21.04.2012 22:54
Доброго времени суток

Возник следующий вопрос. Обрабатываю большие текстовые файлы, хочу добавить полосу прогресса. Имею на руках размер файла в байтах, построчно считываю и полоса прогресса показывает неточные данные. Если быть более подробным, то

double size = SizeCheck(OpenDialog1->FileName.c_str()); //тут получили размер файла
double step = 0; //отношением этой переменной к размеру файла измеряем прогресс

ifstream f(OpenDialog1->FileName.c_str()); //получили файл

string line;
CGauge1->Progress = 0; //стартовый прогресс

for (line;getline(f,line);) //построчно считываем
{
step+=sizeof(line); //увеличиваем шаг
CGauge1->Progress = step / (size / 100); //выводим значения
};


Проблема в том, что при маленьких файлах (пара тройка килобайт) у меня полоса прогресса "зашкаливает", так сказать. При больших - наоборот отстает.
Думаю, это связано с самим алгоритмом: размер файла равен сумме размеров строк, составляющих этот файл. А sizeof кажется дает размер не строки, а переменной, отведенной под эту строку.. не знаю. Скажите, пожалуйста, кто что думает.

Добавлено:
З.Ы. SizeCheck - рукописная процедура. При необходимости текст покажу, но размер дает совпадающий с виндовыми свойствами.
Автор: akaGM
Дата сообщения: 21.04.2012 23:54
gygant

Цитата:
Думаю, это связано с самим алгоритмом: размер файла равен сумме размеров строк, составляющих этот файл. А sizeof кажется дает размер не строки, а переменной, отведенной под эту строку.. не знаю.
ну если дело в этом, то это легко прверяется заменой
sizeof(line) на line.size()
Автор: kotlomoy
Дата сообщения: 22.04.2012 03:55
gygant
sizeof возвращает размер объекта в байтах, он не меряет длину строки string
Автор: gygant
Дата сообщения: 22.04.2012 09:28
kotlomoy
akaGM
Спасибо за подсказку, заработало

for (line;getline(f,line);)
{
step+=line.size();
step+=2; //символ завершения строки, так полагаю.. без этого неточно.
CGauge1->Progress = step / (size / 100);
};
Автор: dimon0476
Дата сообщения: 22.04.2012 12:43

Цитата:
dimon0476
зависит от базового уровня

Мой базовый уровень - Паскаль школьный курс. Как продолжить улучшаться в программировании? Чего лучше дальше учить?
Автор: gygant
Дата сообщения: 22.04.2012 19:29
dimon0476
По необходимым программам улучшайся. Вот, к примеру, тебе задача - разработай программку, которая будет хранить данные в файле. Данные дата, название, комментарий. Ежедневник. Так же пусть это будет отмечаться разными цветами красный - не выполнено. Зеленый - выполнено. Раз ты паскаль учил, значит пиши в Delphi. Пожалуйста. Пока напишешь - уже на уровень выше встанешь.
Автор: dimon0476
Дата сообщения: 22.04.2012 19:43
gygant, спасибо за идею.
Автор: theone555
Дата сообщения: 24.04.2012 15:05
ребята, задачу решил, но. не пойму почему через функцию fgets нельзя заполнить массив повторно. при том не выходя из void повторную запись в массив осуществить можно, а после выхода - нет.??? кто сталкивался?#
Автор: akaGM
Дата сообщения: 24.04.2012 15:55
theone555
напомни о чём речь?
Автор: theone555
Дата сообщения: 24.04.2012 20:30
akaGM, символьные массивы.
Автор: akaGM
Дата сообщения: 25.04.2012 00:16
theone555
и что? в проблема-то в чём? можно подробнее?

Цитата:
ребята, задачу решил, но. не пойму почему через функцию fgets нельзя заполнить массив повторно. при том не выходя из void повторную запись в массив осуществить можно, а после выхода - нет.??? кто сталкивался?
думаешь, кто-нибудь тебя понял?

и зачем прятать код под решётку таким хитрым образом, он секретный? или спираченый?
Автор: Eminence
Дата сообщения: 25.04.2012 05:01
theone555, ты здесь не один, и отследить, что было несколько страниц назад, довольно проблематично. Описывай проблему по новой.
Автор: theone555
Дата сообщения: 25.04.2012 08:45
akaGM, Eminence, под решетку спрятал, что б полотно не развешивать. вариант решения мой, не секретный и нигде не украденный (как и все остальное что я пишу). задача решена. проблема в том, что я для удобства ставлю на те "проги" что пишу бесконечный цикл на выполнение. Это очень удобно, т.к. пользователю/учителю нет надобности в перезапуске "проги" для проверки разных вариантов ввода значений переменных. "прога" запускается, отрабатывает и после нажатия любой клавиши консоль очищается и "прога" запускается по новой.
Так вот, если прописать в void допустим так

Код: const int a=100;
char str[a];
puts ("введите слово");
cout<<arr;
puts ("введите слово");
cout<<arr;
Автор: akaGM
Дата сообщения: 25.04.2012 10:46
theone555

Цитата:
что б полотно не развешивать
для этого есть спец-тег {more}


Цитата:
если прописать в void
вот что это такое? main() ? что?


короче, давай код по-человечески...
Автор: Nastya19kiss
Дата сообщения: 25.04.2012 15:35
[more] Всем доброго времени суток. Обращаюсь к вам с вопросиком. Передо мной стоит задача написать код, который:
1. Создавай процесс
2. организовывал между нами pipe
3. Передавал информацию от родительского процесса дочернему. Все хорошо, если бы не одно НО...Необходимо использовать ключи:
-i-ввод информации в файл (родителем). Если ключ не указан то стандартный ввод с клавиатуры
-o-вывод информации в выходной файл дочерним процессом
-r-перенаправление потока ошибок в прежде созданный текстовый файл (допустим list.txt)

ключи задаются при запуске программы, т.е. пример ./a.out -i inputfile-здесь используется входной с файл с информацией для передачи дочернему процессу

Начала писать код:
#include....
........
int main(int argc, char *argv[]){
int input, output,pid
int fd[2]

input=0;
output=1;
for (i=1;i<argc;i++){
if (strcmp(argv[i],"-i")!=0){
i++;
input=open(argv[i],O_RDONLY);
}
if (strcmp(argv[i],"-o")!=0){
i++;
unmask(0644);
output=open(argv[i],J_WRONLY|J_TRUNC|O_SYNC|O_CREAT,0644);
}
if (strcmp(argv[i],"-r")!=0) {
fd1=open(log.txt,O_WRONLY,1);
dup2(fd1,2);
}
вот первая часть готова, в ней я проверяю введенный ключ.
Я так полагаю что дальше я создаю pipe, создаю процесс pid=fork и проверяю если pid>0, то что дальше делать????У меня есть переменные input и output нужно их как то использовать в зависимости от того дочернийй или родительский это процесс

ПОМОГИТЕ реализовать этот дальнейший код
[/more]
Автор: Abs62
Дата сообщения: 25.04.2012 17:14
theone555

Цитата:
вопрос: как сделать так, что бы перезапись символьного массива после первого прохождения программы была возможна?

Добавить fflush(stdin) перед fgets, очистить буфер ввода.

А вообще, смешивать потоки C (stdin/stdout) с потоками C++ (cin/cout) - не самая лучшая идея.
Автор: Eminence
Дата сообщения: 25.04.2012 18:50
Nastya19kiss, есть один способ, нужно объявить переменную и перед созданием процесса присвоить какое-нибудь значение, которое затем можно проверить. Точнее посмотрю завтра
Автор: Nastya19kiss
Дата сообщения: 25.04.2012 19:15
Посмотри пожалуйста. очень нужна помощь
Автор: gluk_123
Дата сообщения: 26.04.2012 13:45
созрел вопрос, направьте куда копать. Использую VS2010 С++. Есть текстовые файлики размеров 200-600мб. Юникодовые файлики (UTF-8, точнее). Требуется их распарсить. Читаю я эти файлики StreamReader'ом. И есть проблема в быстродействии этого чтения и в позиционировании. Нет ли способа подгрузить весь файлик в память и подсунуть StreamReader'у этот кусок памяти?
Автор: bomzzz
Дата сообщения: 26.04.2012 14:06
никто не знает как инжект в процесс на windows 7 надо делать? чета не гуглится не фига, кроме того что как на хп не работает
Автор: dimpase
Дата сообщения: 26.04.2012 15:26
Всем привет.
Совсем нуб!
Подскажите, как программа обменивается информацией с ком портом?
Вернее как она обменивается информацией не с комп-портом. а с ккм, через ком порт.
ККМ-КОМП-ПРОГРАММА
Как они обмениваются информацией? если порт открыт той программой, или железкой, в данном случае ккм, которая открыла порт первой.
или они закрывают его поочередно и потом открывают?
Много сайтов перелистал, но так и не понял.
Есть какие то прерывания, может быть во время этих прерываний приемник молчит,передатчик отдает, потом наоборот?
Заранее сенкс, не пинайте больно.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.