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




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 16 из 87<  1 ... 13  14  15  16  17  18  19 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Так ты ж вектор хотел заюзать? Вот и юзай его. :) Размеры укажешь, когда будут известны.



Партнер
 

Member
Статус: Не в сети
Регистрация: 17.11.2003
Откуда: Петроской
Комрады, есть 2 вопросика, которые не дают мне покоя:
1. Во всех учебниках, а также нам на лекциях говорили, о том, что при сравнении
Код:
while( (c=getchar()) != EOF)
в самых простейших программах нужно, стобы С было int, и ни в коем случае не char, так как EOF это "-1", а char от 0 до 255 и минус единица преобразуется в 255 и цикл никак не завершиться, все это понятно, но скажите ПОЧЕМУ программы работают, если ставить переменную С как char :insane: ? также, как и использование fgetc в работе с файлами и сравнение с EOF
2.составил программу, все работает, отлично, но решил выделять память динамически с функцией calloc или malloc и возникает в хаотичном порядке ошибка segmentation fault при работе, программы пишутся под SUSE linux
вот что, мне кажется привело к ошибке
Код:
if(dlina>max_dlina && flag==1 )
{  max_dlina=dlina;
   stroka_result=number_stroki;
   *buf_ukaz='\0';
   slovo = calloc((strlen(buf)+1),sizeof(char));
   strcpy(slovo,buf);
}

сама программа вот тут исходник


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
maslyak писал(а):
Комрады, есть 2 вопросика, которые не дают мне покоя:
1. Во всех учебниках, а также нам на лекциях говорили, о том, что при сравнении
Код:
while( (c=getchar()) != EOF)
в самых простейших программах нужно, стобы С было int, и ни в коем случае не char, так как EOF это "-1", а char от 0 до 255 и минус единица преобразуется в 255 и цикл никак не завершиться, все это понятно, но скажите ПОЧЕМУ программы работают, если ставить переменную С как char :insane: ? также, как и использование fgetc в работе с файлами и сравнение с EOF
2.составил программу, все работает, отлично, но решил выделять память динамически с функцией calloc или malloc и возникает в хаотичном порядке ошибка segmentation fault при работе, программы пишутся под SUSE linux
вот что, мне кажется привело к ошибке
Код:
if(dlina>max_dlina && flag==1 )
{  max_dlina=dlina;
   stroka_result=number_stroki;
   *buf_ukaz='\0';
   slovo = calloc((strlen(buf)+1),sizeof(char));
   strcpy(slovo,buf);
}

сама программа вот тут исходник


1. Ну ты просто в переменную с записываешь то что возвращает функция getchar() и уже это сравниваешь..

P.S. пользуясь моментов хочу передать всем привет, и прошу помочь мне в следущей задаче:
необходимо организовать кольцевую очередь для хранения следующих данных:
- наименование устройства,
- год выпуска,
-стоимость.
Обеспечить выполнение операций:
- добавление элемента в очередь,
- удаление элемента из очереди,
- прокрутку очереди,
- определение позиции заданного элемента в очереди,
- нахождение суммарной стоимости устройств,
- распечатка содержимого очереди,
- формирование списка из элементов с заданным значением некоторого поля.

просто помогите сделать эту структыру..или что это.и как обращаться с её элементами?
Всё это на С++. Заранее спасибо )


 

Member
Статус: Не в сети
Регистрация: 30.01.2006
Откуда: Минск
maslyak, насчет первого-черт его знает, факт что работает.
По второму- наверно, выскакивает ошибка, когда комбинация в файле не встречается? Проблема не там. Если комбинация в файле не встречается- у тебя
остается неинициилизированный указатель slovo, который ты затем пытаешься уничтожить. Исправь: вместо char *slovo- char *slovo=NULL и вместо
free(slovo)- if (slovo) free(slovo).
Добавлено спустя 29 минут, 52 секунды
pretorian
Код:
struct device
{
  char name[20];
  int year;
  int cost;
  device *next;
};

У последнего элемента next ссылается на первый- вот и получится кольцевая очередь.
Хранишь в программе указатель на первый элемент- отсюда и отталкиваешься. Работаешь как с обычной структурой.
Например, добавление элемента будет реализовываться так:
Код:
device* now=first;
while (now->next!=first) now=now->next;
now->next=new device; //также можно использовать malloc
now=now->next;

//здесь будет инициализация полей нового элемента

now->next=first;


 

Member
Статус: Не в сети
Регистрация: 17.11.2003
Откуда: Петроской
Alex12 писал(а):
Исправь: вместо char *slovo- char *slovo=NULL и вместо
free(slovo)- if (slovo) free(slovo).

:dance: ура, так и есть, теперь работает, спасибо


 

Member
Статус: Не в сети
Регистрация: 12.12.2003
Откуда: Уфа
разбираю сейчас текст одной программы, там есть такие присвоения переменным:
m_x=10.f
m_y=0.f
Что обозначает эта .f?


 

Member
Статус: Не в сети
Регистрация: 05.09.2006
Откуда: (UA)Dnepr
kexman писал(а):
Что обозначает эта .f?

float
Добавлено спустя 5 минут, 59 секунд
maslyak писал(а):
1. Во всех учебниках, а также нам на лекциях говорили, о том, что при сравнении
Код:
while( (c=getchar()) != EOF)
в самых простейших программах нужно, стобы С было int, и ни в коем случае не char, так как EOF это "-1", а char от 0 до 255 и минус единица преобразуется в 255 и цикл никак не завершиться, все это понятно, но скажите ПОЧЕМУ программы работают, если ставить переменную С как char Безумный ? также, как и использование fgetc в работе с файлами и сравнение с EOF

Чтото путаеш. Диапазон чара "-127" - "128". Ноль кстати отрецательное число :roll: :)
Добавлено спустя 1 минуту, 17 секунд
Это если прямо скажеш шо беззнаковый.... тада твоя правда
Добавлено спустя 3 минуты, 24 секунды
pretorian писал(а):
P.S. пользуясь моментов хочу передать всем привет, и прошу помочь мне в следущей задаче:
необходимо организовать кольцевую очередь для хранения следующих данных:
- наименование устройства,
- год выпуска,
-стоимость.
Обеспечить выполнение операций:
- добавление элемента в очередь,
- удаление элемента из очереди,
- прокрутку очереди,
- определение позиции заданного элемента в очереди,
- нахождение суммарной стоимости устройств,
- распечатка содержимого очереди,
- формирование списка из элементов с заданным значением некоторого поля.

просто помогите сделать эту структыру..или ч


Вы пан, ето, напишите это сами. Подобные задачки помогают потом безпроблемно мыслить более высокими категориями.
Добавлено спустя 41 секунду
Подсказываю: смотри в сторону двунаправленного списка.
Цитата:
просто помогите сделать эту структыру

struct nazoviMenja
{
std::string imjaUstroystva;
unsigned int godVipuska;
int cenaVCopeykah;
};


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
Alex12 писал(а):
maslyak,
Код:
device* now=first;
while (now->next!=first) now=now->next;
now->next=new device; //также можно использовать malloc
now=now->next;

//здесь будет инициализация полей нового элемента

now->next=first;

а где будут храниться данные по всем элементам? я не очень понимаю эту тему..я бы сделал массив структур..но как тогда добавлять ещё элементы...
и, если возможно, обясните поподробней этот код..
Код:
device* now=first;
while (now->next!=first) now=now->next;
now->next=new device; //также можно использовать malloc
now=now->next;

//здесь будет инициализация полей нового элемента

now->next=first;


 

Member
Статус: Не в сети
Регистрация: 30.01.2006
Откуда: Минск
pretorian зачем два раза один код скопировал?
В first хранится данные для первого элемента. У него есть поле next, которое указывает на следующий элемент. В том свою очередь хранятся данные второго элемента, а next указывает на следующий и т.д.
Этот код делает следующее- просматривает элементы, пока не дойдет до последнего, т.е. такого, у которого next указывает на first, затем next заменяется на новый элемент, потом заполняем поля этого элемента(это в коде опущено) и наконец присваеваем next этого нового элемент first, сохраняя циклическую очередь.


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
ага, т.е. это получается запись в конец...чтото проясяняется..а как присвоить данные новосу элементу?
nоw.year=1998;
так чтоли?

_________________
Loading...


 

Member
Статус: Не в сети
Регистрация: 30.01.2006
Откуда: Минск
почти. Так было бы, если now был именем структуры. Так как это указатель на структуру, то нужно now->year=1998;


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
Alex12 писал(а):
почти. Так было бы, если now был именем структуры. Так как это указатель на структуру, то нужно now->year=1998;

Ага, спасибо. А как удалять элемент из очереди?


 

Member
Статус: Не в сети
Регистрация: 30.01.2006
Откуда: Минск
Зависит по какому критерию его удалять. Например, если нужно удалить элемент с определённым именем, то это выглядит так
Код:
int element_delete(char *delete_name)
{
device *now=first;
device *tmp;
while (strcmp(now->next->name,delete_name)) {
  now=now->next;
  if (now==first) {
     printf("List hasn't element with such name\n");
     return 1;
  }
}
if (now->next==first) first=first->next;
tmp=now->next;
now->next=now->next->next;
delete tmp;
return 0;
}

Здесь подразумевается, что first-глобальная переменная. Если она объявлена
в main(), то заголовок функции будет выглядить как int element_delete(char *delete_name,device *first).


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
first-глобальная переменная какого типа?
А при удалении элемента не надо както высвобождать память?
а в циклической очереди есть нумерация элементов? Ну чтобы можно было удалить второй, или третий...по номеру т.е.
И что вот эта строчка значит:
Код:
while (strcmp(now->next->name,delete_name)) {

пока имя текущего элемента совпадает с именем удаляемого?


 

Member
Статус: Не в сети
Регистрация: 14.08.2004
Откуда: Москва
Приветствую! Подскажите пожалста откуда можно скачать Borland C++ 5.02 или выше?? Билдер не нужен... Дайте ссылку пожалста - уже почти час мучаю яндекс - нифига найти не могу :(


 

Member
Статус: Не в сети
Регистрация: 30.01.2006
Откуда: Минск
pretorian, мда, как все запущено.
Разумеется first переменная типа device *. Высвобождает память оператор delete. Если не нравится такой способ-можешь использовать free.
Функция strcmp возвращает 0, когда две строки равны, т.е. этот цикл выполняется, пока имена не равны.
Добавлено спустя 14 минут, 53 секунды
Насчет номеров- а ты где-нибудь в структуре их видишь?
Заводишь счетчик присваиваешь начальное значение 1. Затем просматриваешь элементы начиная с первого и каждый раз при переходе к следующему увеличиваешь счетчик на 1. Так продолжаешь, пока счетчик не достигнет нужного значения и удаляешь текущий элемент


 

Member
Статус: Не в сети
Регистрация: 09.08.2005
Откуда: Земля
Помомогите составить программу использующую массив, или хотя бы объясните что это такое массив.!!

Нужно составить программу для вычисления Y=(U+T)*(S+2),где
S-произведение положительных элементов массива
T-номер неаименьшего по модулю массива
U-количество ненулевых элементов массива
Массив объявляется на 10 элементо вещественного типа.
Размер рабочего массив определяется пользователем(от 0 до 10).

В результате работы программы должен быть представлен исходный одномерный массив и результат обработки этого массива.
Сейчас сам пробую её написать, только что не получается.Ну не понять мне массивов! :weep:
Заранее благодарен


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
хоть бы написал на каком языке....
да и массивы это просто...представь себе что массив это железнодорожный состав, из кучи вагонов. в каждом вагоне чтото есть. Вагоны нумеруются слева- направо, начиная с нуля( ну вобщем смотря где...)

тю блин..это ж ветка про С++, чтото я туплю..

вот примерный набросок:
Код:
#include <conio.h>
#include <iostream.h>
#include <math.h>
void main() {
float  f[10];  //рас уж он должен быть на 10 элементов то пусть статический будет.
int n;
cout<<"Введите число элементов массива (0<n<10)...\n";
cin>>n;
if (n>0 && n <=10)
    for (int i=0;i<n;i++)
        {
         cout<<"Введите "<<i+1<<"й элемент массива!\n";
         cin>>f[i];
         }
float S=1; //нахождение произв-я полож-х эл-в
for (int i=0;i<n;i++)
if (f[i]>0) S=S*f[i];

//Поиск номера минимального числа по модулю
int T; float min;
min=f[0];T=0;
for (int i=0;i<n;i++)
if (abs(f[i+1])<min) {
min=abs(f[i+1]);
T=i;
}
//подсчет кол-ва ненулевых элем-в массива.
int U;
U=0;
for (int i=0;i<n;i++)
if (f[i]<>0) U++;

//подсчет рез-та Y=(U+T)*(S+2)

float Y;
Y=(U+T)*(S+2);

//вывод исх-го массива
for (int i=0;i<n;i++)
cout<<f[i]<<"   ";
cout<<"Ваш результат: "<<Y;
}




Alex12 или ктото ещё, помоги плиз..вот сделал я такую пока прогу: ф-ция добавления в очередь, и вывод очереди:
Код:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>

struct device
{
  char name[20];
  int year;
  int cost;
  device *next;
};

device* first;

int addnew(char N[20], int Y, int C) {
device* now=first;
while (now->next!=first) now=now->next;
now->next=new device; //также можно использовать malloc
now=now->next;
//now->name =N;
strcpy(now->name ,N);
now->year =Y;
now->cost =C;

now->next=first;
return 0;
}


void print() {
   device* now=first;
   while (now->next!=first) {
      cout<<"----------------\n";
      cout<<now->cost;
      cout<<now->name ;
      cout<<now->year;
      now=now->next;
   }
}

int main() {
addnew("nomer1",1998,20043);
addnew("nomer2",2008,20043433);
addnew("nomer3",1988,200000);
print();
getch();
return 0;
}

в Студио 2006 С++ эта прога тутже с ошибкой закрывается. В борланде выдают вот такой странный результат (причем ещё с писком динамика):
http://img212.imageshack..us/my.php?image=cppresizeqo6.jpg
(это после нескольких запусков)


 

Member
Статус: Не в сети
Регистрация: 09.08.2005
Откуда: Земля
2 pretorian: я пока пытаюсь выучить простой С, а ты написал прогу на С++?.Не можешь показать как она выглядит на С
Добавлено спустя 59 секунд
2 pretorian: я пока пытаюсь выучить простой С, а ты написал прогу на С++?.Не можешь показать как она выглядит на С.
Всё равно огромный респект!!!! :applause:


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
LiS95 писал(а):
2 pretorian: я пока пытаюсь выучить простой С, а ты написал прогу на С++?.Не можешь показать как она выглядит на С
Добавлено спустя 59 секунд
2 pretorian: я пока пытаюсь выучить простой С, а ты написал прогу на С++?.Не можешь показать как она выглядит на С.
Всё равно огромный респект!!!! :applause:


Никогда не учил С, но я думаю выгледит похоже)
кажется вместо cout надо print писать, а вместо cin чтото ещё...


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 16 из 87<  1 ... 13  14  15  16  17  18  19 ... 87  >
-

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


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

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


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

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