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




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

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
bao писал(а):
народ, что за баг с компилятором

Код:
#include <iostream>
using namespace std;

чего выдает?



Партнер
 

Member
Статус: Не в сети
Регистрация: 09.10.2006
Откуда: 59'39N 30'36E
unable to open include file 'iostream'
как я только не изгалялся.


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
iostream.h

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 09.10.2006
Откуда: 59'39N 30'36E
я ж написал что и аш пробовал, тот же баг


 

Member
Статус: Не в сети
Регистрация: 10.03.2004
Откуда: Минск
bao А зачем в 2006 году нужен Borland C++ 3.1 , просто интересно даже?


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
bao ну ладно, фиг с ним. Нет ни времени ни желания разбираться, счас кину ссылку в личку на тот BC3.1, который я юзаю, там еще ворох лаб каких-то внутри, так что не пугайся :)

force_sk далеко не все пишут под винду и вообще под PC, есть довольно широкая область где обычный C еще очень широко применяется, а BC3.1 прекрасно подходит, чтобы отлаживаться на PC, прежде чем работать с железом.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
Lord_of_Darkness писал(а):
далеко не все пишут под винду и вообще под PC, есть довольно широкая область где обычный C еще очень широко применяется, а BC3.1 прекрасно подходит, чтобы отлаживаться на PC, прежде чем работать с железом.

Я тоже так раньше думал, но работать с досом в наше время напряжно: винхп и дос вещи несовместимые. А отлаживать некоторый код можно и под винду - я так всегда делаю. Например гцц с мингв(я вот этим пользуюсь). Если кто не видел, то попробуйте.


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Да уж, отлаживаться под DOS - это изврат. Если так необходимо отлаживать на PC, в Visual C++ в настройках проекта устанавливаешь 'Compile as C code' и дебажишь.


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
Вот мне надо чтобы в этом кольцевой очереди был указатель начала, указатель конца. Элементы должны добавляться в конец(хвост) а удаляться сначала (головы)...как мне изменить мою прогу? оНа только с одним указателем сейчас. Заранее благодарен )
Код:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>

int addnew(char N[20], int Y, int C);
void print();

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

device* first=NULL;

int addnew(char N[20], int Y, int C) {

   if (first==NULL) {
  first=new device;
  strcpy(first->name ,N);
  first->year =Y;
  first->cost =C;
  first->next=first;
}
   else {
 device* now=first;
while (now->next!=first) now=now->next;
now->next=new device;
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;
   if(first == NULL){
       cout<<"empty"<<endl;
       return;
   }
do  {
      cout<<"----------------\n";
      cout<<now->cost<<"\n";
      cout<<now->name<<"\n" ;
      cout<<now->year<<"\n";
      now=now->next;
} while (now!=first);

}

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

return 0;
}


Последний раз редактировалось pretorian 19.11.2006 12:37, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 09.08.2005
Откуда: Земля
Помогите исправить прогу от багов:
Вот что нужно получить:
Y = (U + T) * (S + 2),
где S - произведение положительных элементов массива;
T - номер наименьшего по модулю элемента массива;
U - количество ненулевых элементов массива.
Массив вводится на 10 элементов.

Код:
#include<stdio.h>
#include<math.h>
void main()
{
FILE *R;
double f[10],Y,X,S,min;
int n,i,T,U;
R=fopen("rez2.txt","w");
fprintf(R,"\n\n\Исходный одномерный массив\n");
printf("‚Исходный одномерный массив:\n");
scanf("%d",&n);
if(n>1 && n<=10)
{
for(i=0;i<n;i++)
{
printf("‚Введите массив:");
scanf("%lf",&f[i]);
fprintf(R,"\t%.2lf\n",f[i]);
}

S=1;{
for(i=0;i<n;i++)
if(f[i]>=0)
S=S*f[i];
}
printf("\n\Произведение положительных элементов массива : S=%.2lf",S);
fprintf(R,"\Произведение положительных элементов массива : S=%.2lf",S);
min=f[0];
T=0;
for(i=0;i<n;i++)
if(abs(f[i])<min)
min=abs(f[i]);
T=i;
printf("\n\Номер наименьшего по модулю элемента массива T=%d",T);
fprintf(R,"\n\Номер наименьшего по модулю элемента массива T=%d",T);
for(i=0;i<n;i++)
if(f[i]<0 || f[i]>0)
U=0;
else
U=i;
printf("\nКоличество ненулевых элементов массива U=%d",U);
fprintf(R,"\n\n\nКоличество ненулевых элементов массиваU=%d",U);
Y=(U+T)*(S+2);
printf("\n\n\tИсходный одномерный массив");
for(i=0;i<n;i++)
printf("\n\t%.2lf",f[i]);
printf("\n\n ‚ Ваш результат Y=%.2lf",Y);
fprintf(R,"\n\n ‚Ваш результат Y=%.2lf",Y);
printf("\Результат можно посмотреть в файле  rez2.txt\n");
}
else
printf("ЌҐ Їp ўЁ«м­® ®Ўмпў«Ґ­ ¬ ббЁў");
return;
fclose(R);
}

Так вот у меня косяки при считании произведения положительных элементов массива:
Например, когда вводишь массив {-2 0 -3 0} он считает произведение=1 :spy:
и
А номер наименьшего СИ считает вообще криво.
Уважаемые оверы посмотрите мою прогу!!(Первый опыт работы с массивом)


 

Member
Статус: Не в сети
Регистрация: 30.01.2006
Откуда: Минск
LiS95, косяков куча. Произведение, кстати, считается почти правильное. На {-2 0 -3 0} у меня выдает 0.
Короче так:
Код:
#include<stdio.h>
#include<math.h>
void main()
{
  FILE *R;
  double f[10],Y,X,S,min;
  int n,i,T,U,q;
  R=fopen("rez2.txt","w");
  fprintf(R,"\n\n\Исходный одномерный массив\n");
  printf("‚Размер исходного одномерного массива:\n");
  scanf("%d",&n);
  if (n>1 && n<=10)
  {
    printf("Введите массив:\n");
    for(i=0;i<n;i++)
    {
      scanf("%lf",&f[i]);
      fprintf(R,"\t%.2lf\n",f[i]);
    }
    S=1;
    q=0;
    for(i=0;i<n;i++)
      if (f[i]>0) 
      {
        S=S*f[i];
        q=1;
      }
    if (!q) S=0;   
    printf("\n\Произведение положительных элементов массива : S=%.2lf",S);
    fprintf(R,"\Произведение положительных элементов массива : S=%.2lf",S);
    min=fabs(f[0]);
    T=0;
    for (i=0;i<n;i++)
      if (fabs(f[i])<min) 
      {
        min=fabs(f[i]);
        T=i;
      }
    printf("\n\Номер наименьшего по модулю элемента массива T=%d",T);
    fprintf(R,"\n\Номер наименьшего по модулю элемента массива T=%d",T);
    U=0;
    for(i=0;i<n;i++)
      if (f[i]!=0) U++;
    printf("\nКоличество ненулевых элементов массива U=%d",U);
    fprintf(R,"\n\n\nКоличество ненулевых элементов массиваU=%d",U);
    Y=(U+T)*(S+2);
    printf("\n\n ‚ Ваш результат Y=%.2lf",Y);
    fprintf(R,"\n\n ‚Ваш результат Y=%.2lf",Y);
    printf("\Результат можно посмотреть в файле  rez2.txt\n");
  }
  else  printf("Неправильный размер массива\n"); 
  fclose(R);
}

Вроде так. Проверяй и разбирайся. И код свой структурируй, а то читать неудобно.
pretorian
Код:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>

int addnew(char N[20], int Y, int C);
int deleteelem();
void print();

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

device* first=NULL;
device *last=NULL;
int addnew(char N[20], int Y, int C) {

   if (first==NULL)
  {
    first=new device;
    strcpy(first->name ,N);
    first->year =Y;
    first->cost =C;
    first->next=first;
    last=first;
  }
  else {   
    last->next=new device;
    last=last->next;
    strcpy(last->name ,N);
    last->year =Y;
    last->cost =C;
    last->next=first;
  }
  return 0;
}

int deleteelem()
{
  if (first==NULL)
  {
    cout<<"empty\n";
    return 1;
  }
  first=first->next;
  delete last->next;
  last->next=first;
  return 0;
}

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

}

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


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
Alex12 Спасибо большое )

У тебя случайно нет аси ? :)

Да, и ещё такой вопрос..как выполнить - прокрутку очереди,
Это надо чтобы элемент в начале перешел в конец списка и все элементы соответственно сдвигаются ?
Вот как это реализовать...


 

Member
Статус: Не в сети
Регистрация: 09.08.2005
Откуда: Земля
2 Alex12 Спасибо большое ) :)
:up: Теперь разобрался.
А за вид кода меня всегда препод ругает :fingal: , всё, буду исправляться.


 

Member
Статус: Не в сети
Регистрация: 18.08.2005
Откуда: Новороссийск
Блин, что-то я не пойму, такая форма записи ведь допустима или нет?
Копилятор ( VC 8.0) выдаёт ошибку illegal digit '8' for base '8', не пойму, что ему не нравится.
Причём число вида: 02 компилятор пропускает, а 08 и 09 ему не нравится, что за фигня.

Код:
   const int ST = 16;

   int P01[ST] = {08,08,10,10,10,10,10,08,10,08,10,10,00,00,00,00};
   int P02[ST] = {10,10,01,06,08,00,00,10,06,10,08,08,10,04,10,00};
   int P03[ST] = {01,00,05,08,06,04,06,03,08,00,00,00,02,00,04,00};
   int P04[ST] = {02,00,00,00,05,00,08,06,00,06,06,06,08,10,08,00};
   int P05[ST] = {05,00,06,00,02,05,02,00,04,00,04,05,01,06,06,00};
   int P06[ST] = {00,01,04,00,00,02,00,04,00,05,00,03,06,00,00,00};
   int P07[ST] = {00,00,08,02,00,08,00,02,00,00,02,01,00,08,03,00};
   int P08[ST] = {00,05,00,00,00,06,00,00,00,04,00,00,00,00,00,00};
   int P09[ST] = {06,00,00,00,00,00,00,05,05,00,00,04,00,00,00,00};
   int P10[ST] = {00,02,00,00,03,00,05,01,00,00,00,02,05,05,05,00};
   int P11[ST] = {03,00,02,00,00,03,00,00,01,00,05,00,03,00,00,00};
   int P12[ST] = {00,00,00,05,04,00,00,00,00,00,00,00,00,00,00,00};
   int P13[ST] = {00,06,00,00,00,00,00,00,00,00,00,00,00,00,00,00};
   int P14[ST] = {00,00,00,04,00,00,00,00,02,01,00,00,00,00,00,00};
   int P15[ST] = {04,00,00,01,01,00,00,00,00,00,00,00,00,00,00,00};
   int P16[ST] = {00,00,00,00,00,00,04,00,00,02,00,00,00,00,00,00};
   int P17[ST] = {00,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00};
   int P18[ST] = {00,00,00,03,00,00,01,00,00,00,00,00,00,00,00,00};
   int P19[ST] = {00,00,00,00,00,00,03,00,00,00,00,00,00,00,00,00};
   int P20[ST] = {00,00,03,00,00,00,00,00,00,00,00,00,00,00,00,00};
   int P21[ST] = {00,00,00,00,00,00,00,00,03,00,00,00,00,00,00,00};
   int P22[ST] = {00,03,00,00,00,00,00,00,00,00,00,00,04,00,00,00};
   int P23[ST] = {00,00,00,00,00,00,00,00,00,00,03,00,00,00,00,00};
   int P24[ST] = {00,00,00,00,00,00,00,00,00,03,00,00,00,00,00,00};
   int P25[ST] = {00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00};
   int P26[ST] = {00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00};
   int P27[ST] = {00,00,00,00,00,00,00,00,00,00,00,00,00,03,01,00};
   int P28[ST] = {00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00};
   int P29[ST] = {00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00};
   int P30[ST] = {00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00};


Если не допустима, то объясните пожалуйста почему?


 

Member
Статус: Не в сети
Регистрация: 30.01.2006
Откуда: Минск
pretorian, нету. Насчет прокрутки- в смысле чтобы первый стал последним, а второй первым? Если так- делается в две операции, подумай, это очень просто.
-=alex-forewer=-, если число начинается с 0, оно считается записанным в восьмиричной системе. Соответсвенно, числа 8 там быть не может. Если у тебя десятичные числа- пиши без 0.


Последний раз редактировалось Alex12 20.11.2006 0:54, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 18.08.2005
Откуда: Новороссийск
Alex12 блин :bandhead: , как я мог это забыть :fingal: , видимо просто из-за крайне редкого использования представления числа в восьмиричном виде.


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
[quote="Alex12"]pretorian, нету. Насчет прокрутки- в смысле чтобы первый стал последним, а второй первым? Если так- делается в две операции, подумай, это очень просто.

Не мне кажется это нужно чтобы все элементы сместились...например была очередь из элементов:
1 2 3 4
после прокрутки станет:
4 1 2 3

вот..придумал чтото..но это не две строчки (

Код:
void shift() {
   device* now=first;
    if(first == NULL)
  {
       cout<<"Nothing to shift!"<<endl;
       return;
   }

    last->next=new device;
    last=last->next;
    strcpy(last->name ,first->name );
    last->year =first->year ;
    last->cost =first->cost;
    last->next=first;

 first=first->next;
  delete last->next;
  last->next=first;
}


 

Member
Статус: Не в сети
Регистрация: 30.01.2006
Откуда: Минск
pretorian, если так -смещать неудобно. Потребуется цикл, т.к. на последнее место должен стать предпоследний, который можно найти только идя от первого.
В твоем варианте ты смещаешь в противоположную сторону, т.е. из 1 2 3 4-2 3 4 1. Только зачем так извращенно? Достаточно двух строк last=first; first=first->next;. Это я и имел ввиду.


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
Alex12 писал(а):
pretorian, если так -смещать неудобно. Потребуется цикл, т.к. на последнее место должен стать предпоследний, который можно найти только идя от первого.
В твоем варианте ты смещаешь в противоположную сторону, т.е. из 1 2 3 4-2 3 4 1. Только зачем так извращенно? Достаточно двух строк last=first; first=first->next;. Это я и имел ввиду.


Да, действительно проще )

Ещё проблема...после того как добавил элементы(ы) удалять если..то когда все удалились и попробовать снвоа удалит, то вылетает с ошибкой.
Я подправил эту функцию:
Код:
int deleteelem()
{
  if (first==NULL)
  {
     
    return 1;
  }
  first=first->next;
  delete last->next;
  last->next=first;
  if (first->next ==last)
     first=NULL;
  return 0;
}

Но теперь когда остаётся 2 элемента и если вызвать удаление, то удалятся оба. но уже не будет вылета с ошибкой если попробовать снова удалять.


 

Member
Статус: Не в сети
Регистрация: 30.01.2006
Откуда: Минск
Код:
int deleteelem()
{
  if (first==NULL)
  {
    cout<<"empty\n";   
    return 1;
  }
  if (first->next==first)
  {
     delete first;
     last=first=NULL;
  }
  else
  {
    first=first->next;
    delete last->next;
    last->next=first;
  }
  return 0;
}

Давай, если ещё будут вопросы- в личку, а то уже три листа одну прогу пишем.


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

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


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

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


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

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