Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Заказы "Сделайте все за меня"


Рекомендуемые сообщения

есть задачка по асемблеру:

Реализовать процедуру, определяющую максимальную цифру (десятичная система) в

целочисленном значении типа word, переданном в параметре. Используя данную

процедуру обработать 10 чисел, значение которых жестко кодируется в программе.

Результат вывести на экран.

(При реализации всех процедур передачу параметров реализовать через стек. Процедуры возвращают целочисленные значения

регистр AX, остальные значения возвращаются через параметр по ссылке (адрес, куда

необходимо записать результат, передается в параметре процедуры))

для кода надо использовать16 сегмент то есть

.486

model small

Data SEGMENT use16

ASSUME ds:Data

Говорят что асемблер он очень простой язык ,но для меня он не понятен ))

Ссылка на комментарий
Поделиться на другие сайты

миклух

Дописывать твою программу не буду, но у тебя соответственно последняя запись первого списка должна указывать, насколько я понял задание, на начало второго списка, конец второго списка должен указывать на начало третьего, а конец третьего - на начало первого. Это можно сделать уже после создания трех списков. То есть NULL в конце заменить на адрес начала следующего списка. И чтобы знать, где какой начинается и когда он кончается, нужны три указателя на начала разделов кольцевого списка.

Что мне осталось непонятным, это смысл делать из трех разных частей одно кольцо...

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Помогите, пожалуйста, написать следующие задачи на паскале:

1). Записать на место первого положительного элемента массива Z(13) максимальный элемент матрицы R[10x15];

2). В каждом столбце матрицы R [15х20] поменять местами максимальный и минимальный элементы.

Заранее спасибо!

Ссылка на комментарий
Поделиться на другие сайты

@Тролль, огромное человеческое спасибо за комментарии.

Можно ещё попросить?

Задание такое:

Ввести строку и слово. Вывести только те слова, середина которых совпадает с введенным словом. Функции из String.h не использовать

Написать на C.

Заранее спасибо!

Ссылка на комментарий
Поделиться на другие сайты

medvedkotracer

#include<stdio.h>int let(char c){return c>='a'&&c<='z'||c>='A'&&c<='Z';}int main(){char s[200],w[20],c; int i,j,m,k,k1,k2,b;puts("string: "); gets(s); puts("word: "); gets(w); putchar('\n');for(m=0;w[m];m++); for(i=0;s[i];i++); s[i+1]=0; for(j=i;j>0;j--)s[j]=s[j-1];s[0]=' ';for(i=0;s[i];i++){ if(!let(s[i])&&let(s[i+1]))k1=i+1; if(let(s[i])&&!let(s[i+1]))   {k2=i; b=(k2-k1+1)%2==m%2; if(b)for(j=k1+(k2-k1+1-m)/2,k=0;k<m;j++,k++)if(w[k]!=s[j])b=0; if(b){for(j=k1;j<=k2;j++)putchar(s[j]); putchar('\n');}}}putchar('\n'); getchar(); }

Слова считаю состоящими только из латинских букв. Середина слова понимается как его середина - например, sig стоит в середине слов asign, designa, а tr - в середине слов otre, kotres, то есть слева и справа от слова-образца должно быть одинаковое количество букв.

rainbow012

1)

const zn=13; rm=10; rn=15;var z:array[1..zn]of integer; r:array[1..rm,1..rn]of integer; i,j,k,m:integer;beginrandomize; for i:=1 to zn do z[i]:=-500+random(1000);for i:=1 to rm do for j:=1 to rn do r[i,j]:=-500+random(1000);for i:=1 to rm do begin for j:=1 to rn do write(r[i,j]:5); writeln end; writeln;for i:=1 to zn do write(z[i]:5); writeln; writeln;k:=0; for i:=1 to zn do if z[i]>0 then begin k:=i; break end; m:=r[1,1]; for i:=1 to rm do for j:=1 to rn do if r[i,j]>m then m:=r[i,j];if k<>0 then z[k]:=m;for i:=1 to zn do write(z[i]:5); writeln; readlnend.

2)

const m=15; n=20;var r:array[1..m,1..n]of integer; i,j,k,mi,ma:integer;beginrandomize; for i:=1 to m do for j:=1 to n do r[i,j]:=-500+random(1000);for i:=1 to m do for j:=1 to n do write(r[i,j]:4); writeln; writeln;for j:=1 to n dobegin mi:=1; ma:=1; for i:=1 to m do begin if r[i,j]<r[i,mi] then mi:=i; if r[i,j]>r[i,ma] then ma:=i end; k:=r[i,mi]; r[i,mi]:=r[i,ma]; r[i,ma]:=k;end;for i:=1 to m do for j:=1 to n do write(r[i,j]:4); writeln; readlnend.
Ссылка на комментарий
Поделиться на другие сайты

.
#include <stdio.h>#include <ctype.h>char s[200]; int n=0;float number(){ int res=0; while(1){char c=s[n++]; if(isdigit©)res=res*10+c-'0'; else{n--; return res;}}}float expr();float sk(){ if(s[n++]=='('){n++; return expr();}else{n--; return number();}}float factor(){float x=sk(); while(1)  switch(s[n++]){case '*': x*=sk(); break;case '/': x/=sk(); break;default:  n--; return x;}}float expr(){ float x=factor(); while(1)switch(s[n++]){case '+': x+=factor(); break;case '-': x-=factor(); break;default:  n--; return x;}}int main(){ printf("Expression?: "); gets(s); printf("Result: %f\n",expr()); getchar();}

Как говорится чем дальше в лес ,тем больше дров)) сейчас задача более не функцианальней чем была( не сочти за упрёк), то есть уже отказывается считать выражения со скобками и не делит на отриц число)

Ссылка на комментарий
Поделиться на другие сайты

vampir4eg

Я же тебе посылал в ЛС ссылку на работающий вариант, а сейчас мы, похоже, переделываем другой, плохо работающий, оттуда же. Не исключено, что горбатого могила исправит, тем более, что ему есть замена . Я тебе послал ЛС, давай продолжим там.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Всем доброго времени суток! У меня будет очень срочная и довольно-таки извращённая просьба.

Есть скрипт перловский, нужно переписать его для дельфи, а то диплом пролетает как фанера над Парижем:) HALP!

Сам скрипт:

#! c:\perl\bin\perl.exe

use strict;

print "-----------------------------------------------------------\n";

open(IN_F, $ARGV[0]);

my $Size = my @Seq = <IN_F>; #Исходная последовательность чисел полученная из файла и ее размер

close(IN_F);

chomp($_) foreach (@Seq); #Убираем символы перевода строки

my $global_count = $ARGV[1]; #Глобальный счетчик количества фрагментов

my %result_dots; #Конечные точки для применения метода наименьших квадратов

#Цикл определяющий количество фрагментов при текущем разбиении

while($global_count) {

my $N = $Size / $global_count; #Количество елементов последовательности при текущем количестве фрагментов

my $i = 0; #Указатель на текущий элемент последовательности

$N =~ s/\..+//; #Убираем дробную часть если нацело не делится

my $frag_count = 1; #Счетчик фрагментов

my $start_i; #Указатель на начальный элемент во фрагменте

my $sum_r_s = 0; #Сумма отношения размаха к стандартному отклонению по фрагментам при текущем разбиении

#Цикл, отвечающий за перебор фрагментов при текущем разбиении

while ($frag_count <=$global_count) {

$start_i = $i;

my $Yn = 0; #Среднее значение в текущем фрагменте, далее идет цикл, который его вычисляет

while ($i <= ($frag_count * $N)) {

$Yn += $Seq[$i];

$i++;

}

$Yn /= $N;

$i = $start_i; #Возвращаемся в начало текущего фрагмента, так как $i уже находится вначале следующего

my $S = 0; #Стандартное отклонение

my $YnN = 0; #Накопившееся отклонение

my $YnNmax = my $YnNmin = $Seq[$i] - $Yn; #Максимальное накопившееся отклонение и минимальное накопившееся отклонение

#Цикл, вычисляющий накопившееся и стандартное отклонение а так же максимумы и минимумы функции накопившегося отклонения

while ($i <= ($frag_count * $N)) {

$YnN += ($Seq[$i] - $Yn);

$YnNmax = $YnN if $YnN > $YnNmax;

$YnNmin = $YnN if $YnNmin > $YnN;

$S += (($Seq[$i] - $Yn) ** 2);

$i++;

}

$S = ($S/$N) ** 0.5;

my $R = $YnNmax - $YnNmin; #Размах

$sum_r_s += $R / $S;

$frag_count++;

}

$result_dots{log($N / 2)} = log($sum_r_s / $global_count);

$global_count--;

}

#Вычисление всевозможных сумм для применения метода наименьших квадратов

my $sum_xy = my $sum_x = my $sum_y = my $sum_x_2 = 0;

foreach my $x (keys %result_dots) {

$sum_x += $x; #Сумма ln($N/2)

$sum_xy += $x * $result_dots{$x}; #Сумма ln($N/2) * ln(R/S)

$sum_y += $result_dots{$x}; #Сумма ln(R/S)

$sum_x_2 += $x ** 2; #Сумма ln($N/2)^2

}

my $H = ($sum_xy - (($sum_x * $sum_y) / $ARGV[1])) / ($sum_x_2 - (($sum_x ** 2) / $ARGV[1])); #Показатель Хёрста

my $D = 2 - $H; #Фрактальная размерность

print "Herst variable: $H\nFractal dimension: $D\n";

print "-----------------------------------------------------------\n";

Ссылка на комментарий
Поделиться на другие сайты

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

//определяем случайный элемент массива do{ i = rand()%28; }while(test(i, n));//проверяем, сортировался ли данный элемент num[index]=i; left = rand()%2;//выбираем лево-право temp = mas[i];//запоминаем значение для обмена

1. Вроде на С++, но у меня не работает... У одногруппника все нормально. Подскажите, пожалуйста, есть ли ошибки и правильно ли выполнена программа.

Заполнить массив из структур, написать и выполнить программу, используя функции.

1. Описать структуру с именем AEROFLOT, содержащую следующие поля:

• название пункта назначения рейса;

• номер рейса;

• тип самолета.

2. Написать программу, выполняющую следующие действия:

• ввод с клавиатуры данных в массив, состоящий из семи элементов типа AEROFLOT; записи должны быть упорядочены по возрастанию номера рейса;

• вывод на экран номеров рейсов и типов самолетов, вылетающих в пункт назначения, название которого совпало с названием, введенным с клавиатуры;

• если таких рейсов нет, выдать на дисплей соответствующее сообщение.

#include <iostream.h>#include <math.h>#include <fstream>#include <conio.h>#include <stdlib.h>#include <string.h>#include <iomanip.h>#include <locale.h>#include <windows.h>const int L=21, N=100;char S[256];char buf [101];char prov1[170]="абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+=-?:;№~`0";char prov2[32]="1234567890!@#$%^&*()'+=-?:;№~`";// перевод на русский языкchar* RU(char*txt){CharToOem(txt,S);return S;};struct aeroflot{ int num; char type[L]; char dest[L];};// функцииint sortReic (aeroflot x[ ], int nn);int out (aeroflot x[ ], int nn);int main( ){   int i, n, q, fl=0;   char ch[L], ch2;   aeroflot aero[N];   cout<<RU("					    Добро пожаловать!")<<endl;   cout<<RU("****************************************************************")<<endl;   cout<<RU("** Номер рейса состоит только из цифр и не может повторяться. **")<<endl;   cout<<RU("**  Тип самолета и пункт назначения вводятся только буквами.  **")<<endl;   cout<<RU("**					 Спасибо за внимание.				   **")<<endl;	   cout<<RU("****************************************************************")<<endl;	   cout<<endl<<RU("Сколько строк в массиве? ");   cin>>n;   cout<<endl<<RU("Вам необходиме ввести строк: ")<<n<<endl;   cout<<RU("Вводить данные необходимо в следующем порядке:\nНомер рейса, тип самолета, пункт назначения.")<<endl;   for (i=0;i<n;i++)   {      fl=0;   cin>>buf; if (strcspn (buf,prov1)!= strlen(buf)) {  cout<<RU("Номер рейса содержит недопустимые символы.")<<endl;  aero[i].num=0; fl=1; } else {   aero[i].num=atoi(buf); } cin>>aero[i].type; if (strcspn (aero[i].type,prov2)!= strlen(aero[i].type)) {  cout<<RU("Тип самолета содержит недопустимые символы.")<<endl;  fl=1; } cin>>aero[i].dest;    if (strcspn (aero[i].dest,prov2) != strlen(aero[i].dest)) {  cout<<RU("Пункт назначения содержит недопустимые символы.")<<endl;  fl=1; }    if (fl==1) { cout<<endl<<RU("При вводе данных Вы допустили одну или несколько ошибок. \nВведите строку заного.\n"); i--; }	      }   for(i=0;i<n;i++){ for(q=i+1;q<n;q++) {  if(aero[i].num==aero[q].num)  {   fl=1;   cout<<RU("\n Ошибка! Повторяются строки с номерами рейсов")<<endl;   cout<<aero[i].num<<" "<<aero[i].type<<" "<<aero[i].dest<<endl;   cout<<aero[q].num<<" "<<aero[q].type<<" "<<aero[q].dest<<endl;   cout<<endl;  } }}if (fl==1) { cout<<endl<<RU("Программа будет закрыта.\n"); getch(); exit(0); }	     cout<<RU("Вывести на экран введенные данные? y/n")<<endl;   cin>>ch2;   if (ch2==*"y")    out (aero, n);    sortReic (aero, n);   cout<<RU("Массив отсортирован по номеру рейсса.")<<endl;   cout<<RU("Вывести отсортированный массив? y/n")<<endl;   cin>>ch2;   if (ch2==*"y")    out (aero, n);		     cout<<endl<<endl<<RU("Куда вам? (введите город) ");   cin>>ch; cout<<endl;   cout<<RU("Вы выбрали город: "); cout<<ch<<endl;   for (i=0;i<n;i++)   {   if (strcmp (aero[i].dest, ch)==0) break;   }   if (fl==0)   {     cout<<   "---------------------"<<endl;	      cout<<RU("| рейс |    тип	 |")<<endl; cout<<   "|------|------------|"<<endl;     for (i=0;i<n;i++)	  {	   if (strcmp (aero[i].dest, ch)==0)		  cout<<"| "<<setw(5)<<aero[i].num<<"| "<<setw(11)<<aero[i].type<<"|"<<endl;	  }       cout<<   "---------------------"<<endl; }    if (fl==1)   {    cout<<endl<<RU("К сожалению рейсов в выбранный вами город (")<<ch; cout<<RU(") нет.")<<endl;   }    cout<<RU("АЭРОФЛОТ. Летайте с нами.")<<endl<<endl;     system("pause");}int sortReic (aeroflot x[ ], int nn){  int i, fll;  aeroflot z;  do { fll=0; nn--;    for(i=0; i<nn; i++)    if(x[i].num>x[i+1].num)	   {		 z=x[i];		 x[i]=x[i+1];		 x[i+1]=z;		 fll=1;	   }  } while(fll==1);}int out (aeroflot x[ ], int nn){     int i;   cout.setf(ios::left);   cout<<   "---------------------------------"<<endl;cout<<RU("| рейс |    тип	 |   пункт   |")<<endl;cout<<   "|------|------------|-----------|"<<endl;			    for (i=0;i<nn;i++)   cout<<"| "<<setw(5)<<x[i].num<<"| "<<setw(11)<<x[i].type<<"| "<<setw(10)<<x[i].dest<<"|"<<endl;   cout<<   "---------------------------------"<<endl;	 }

2. Для хранения данных о планшетных сканерах описать структуру вида

struct scan_info

{ char model[25]; // наименование модели

int price; // цена

double x_size; // горизонтальный размер области сканир-ия

double y_size; // вертикальный размер области сканирования

int optr; // оптическое разрешение

int grey; // число градаций серого

};

Написать функцию, которая динамически выделяет память под массив структур (не меньше шести элементов), заполняет его данными в режиме диалога и записывает массив в бинарный файл. Структура файла: в первых двух байтах размещается значение типа int, определяющее количество сделанных в файл записей; далее без пропусков размещаются записи о сканерах,

Написать функцию, которая извлекает данные о сканере из описанного выше бинарного файла в структуру типа scan_info. Обязательный параметр — номер требуемой записи. Функция должна возвращать нулевое значение, если чтение прошло успешно, и – 1 в противном случае.

Привести пример программы, создающей файл с данными о сканерах (данные вводятся с клавиатуры) из не менее восьми записей и осуществляющий вывод на дисплей данных о требуемой записи.

Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.

#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#include <iostream>#include <time.h>using namespace std;struct scan_info{int model;int price;double x_size;double y_size;int optr;int grey;}scan;int ShowMenu();void CreateFile();void ViewFile();void Search();int ShowMenu(){   char ch = '\0';    puts("1 : Create a file");   puts("2 : View a file");   puts("3 : Search");   puts("4 : Exit");   ch = getch();   return atoi(&ch);}int main(){  while (1)  {   switch( ShowMenu() )  { 	 case 1: CreateFile(); break;	 case 2: ViewFile(); break;	 case 3: Search(); break;	 case 4: return 0;	 default:		  break;  }  }}void CreateFile(){int n = 0;FILE *data;char* db = "file.dat"; data = fopen(db, "wb");   if( data == NULL )   {   puts("Could not open file for write."); getch();   return;   }cout << endl << "Skolko zapisey budem delat? ";   cin >>n; for(int i = 1; i <= n; i++)   {  printf("\n Scaner #%d\n", i);  cout << endl << "Vvedite Model: \n"; cin >> scan.model;  cout << endl << "Vvedite Price: \n"; cin >> scan.price;  cout << endl << "Vvedite Gorizont: \n"; cin >> scan.x_size;  cout << endl << "Vvedite Vertical: \n"; cin >> scan.y_size;  cout << endl << "Vvedite Optica: \n"; cin >> scan.optr;  cout << endl << "Vvedite Gradaciya: \n"; cin >> scan.grey;  fwrite(&scan, sizeof(scan), 1, data);   }   fclose(data);   printf("Data saved. Press any to continue...");   getch();}void ViewFile(){FILE *data;char* db = "file.dat"; data = fopen(db, "rb");  if( data == NULL )  {  puts("Could not open file for read. Press any to continue..."); getch();  return;  }  cout << endl << "\n Model	   Price	   Gorizont	   Vertical	   Optica	   Gradaciya";while( 1 )  {     fread(&scan, sizeof(scan), 1, data);   if( !feof(data))   { cout << endl << "  " << scan.model << "		   " << scan.price << "		   " << scan.x_size << "			  " << scan.y_size << "			  " << scan.optr << "		    " << scan.grey;   }   else   {	   break;   }  }  fclose(data);  cout << endl <<"\n\nPress any to continue...";  getch();}void Search(){  int mod;  FILE *data;char* db = "file.dat"; data = fopen(db, "rb");  if( data == NULL )  {  puts("Could not open file for read. Press any to continue...");  getch();  return;  }  cout << endl << "Input Model Scaner: \n"; cin >> mod;  cout << endl << "\n Model	   Price	   Gorizont	   Vertical	   Optica	   Gradaciya";  while( 1 )  {     fread(&scan, sizeof(scan), 1, data);   if( !feof(data))   {	    if (scan.model == mod)	    {		    cout << endl << "  " << scan.model << "		   " << scan.price << "		   " << scan.x_size << "			  " << scan.y_size << "			  " << scan.optr << "		    " << scan.grey;	    }   }   else   {		    break;   }  }  fclose(data);  cout << endl <<"\n\nSearch completed. Press any to continue...";  getch();}

И подскажите ссылку, где можно нормальный С++ скачать... Либо из-за того что нетбук, либо из-за того, что семерка, но ничего не работает =(

Ссылка на комментарий
Поделиться на другие сайты

wedma

По порядку.

Необходимо программы на языке С переделать в С++
Все эти программы уже на C++. Странно, что ты этого не заметила ;)
у меня не работает
У меня работает. Хотя оформление вывода можно было бы сделать и получше... Вероятно, у тебя проблема в том, что программа написана на устаревшей версии C++, которая больше не поддерживается. Используй старую версию среды программирования, и она пойдет. Например, Dev-C++ 4.9.9.2 - компактная и простая. Или замени iostream.h на iostream и iomanip.h на iomanip и вставь после блока команд include строку using namespace std;
написать небольшие комментарии, что на каждом этапе выполняется, чтобы можно было понять, как она работает
Тут почти все - ввод-вывод, и так все ясно, писать комментарии к каждой строке не вижу смысла. Разве что int sortReic (aeroflot x[ ], int nn) // сортировка по рейсам

Но это тоже понятно по названию...

Ссылку на "нормальный C++" - можно скачать бесплатную среду программирования от Microsof - Visual C++ Express, но она громоздкая, сложная и заполнена средствами, которые вы не используете. Оптимально скачать более новую версию Dev-C++ 5.2.0.2 Но устаревшие и исключенные из стандарта средства C++ она больше не поддерживает, так что я бы установил более старую версию по первой ссылке.

Ссылка на комментарий
Поделиться на другие сайты

@Тролль, просто в значке программы написано С source file, а не С++, как обычно. За ссылку спасибо, открывает, но все-равно не работает =(

Ссылка на комментарий
Поделиться на другие сайты

@Тролль, По 2-й программе выдает это.

Компилятор: Default compiler

Выполнение gcc.exe...

gcc.exe "E:\прогр-е\Сканеры.c" -o "E:\прогр-е\Сканеры.exe" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"

E:\прогр-е\Сканеры.c:5:20: iostream: No such file or directory

E:\прогр-е\Сканеры.c: In function `CreateFile':

E:\прогр-е\Сканеры.c:69: error: `cout' undeclared (first use in this function)

E:\прогр-е\Сканеры.c:69: error: (Each undeclared identifier is reported only once

E:\прогр-е\Сканеры.c:69: error: for each function it appears in.)

E:\прогр-е\Сканеры.c:69: error: `endl' undeclared (first use in this function)

E:\прогр-е\Сканеры.c:70: error: `cin' undeclared (first use in this function)

E:\прогр-е\Сканеры.c:71: error: 'for' loop initial declaration used outside C99 mode

E:\прогр-е\Сканеры.c: In function `ViewFile':

E:\прогр-е\Сканеры.c:99: error: `cout' undeclared (first use in this function)

E:\прогр-е\Сканеры.c:99: error: `endl' undeclared (first use in this function)

E:\прогр-е\Сканеры.c: In function `Search':

E:\прогр-е\Сканеры.c:134: error: `cout' undeclared (first use in this function)

E:\прогр-е\Сканеры.c:134: error: `endl' undeclared (first use in this function)

E:\прогр-е\Сканеры.c:134: error: `cin' undeclared (first use in this function)

Выполнение завершено

Изменено пользователем wedma
Ссылка на комментарий
Поделиться на другие сайты

wedma

А. так у тебя файл называется Сканеры.c

Это указывает компилятору, что для этого файла надо использовать не компилятор C++, а компилятор С. Переименуй файл к расширению cpp

Ссылка на комментарий
Поделиться на другие сайты

Троль есть к тебе ещё один вопрос по очереди .

Программа вроде всё рабочая но при выполнении нескольких действий вылетает ошика...Действия типа : создать очередь , просмотреть очеречь а после них жмёшь удалить и выскакивает обибка. Что ето может быть ?

Безымянный.bmp

Безымянный.bmp

Ссылка на комментарий
Поделиться на другие сайты

Ну, тебе же написали, что переменная rc была использована до того как была проинициализирована.

Ссылка на комментарий
Поделиться на другие сайты

что там написано понятно а вот как с этим бороться

вот весь код програмы

очередь с приоритетом.txt

очередь с приоритетом.txt

Ссылка на комментарий
Поделиться на другие сайты

Подозреваю, что в этом куске кода есть ошибка

int Deq(Queue& q)				   // удалить элемент из очереди{int rc;if (!q.isEmpty()){ rc = q.Storage[q.Head]; q.Head=(q.Head+1)%q.Size;}return rc;}

Здесь, сразу после объявления переменной идёт проверка, если "q" не пустая, то выполняет код по присваиванию переменной "rc" значения. После чего функция возвращает значение переменной "rc". Внимание вопрос, что будет если значение "q" окажется пустым? Функция должна вернуть пустое значение "rc", а правильно ли это, я не знаю. Я не программист :)

Ссылка на комментарий
Поделиться на другие сайты

benefit

Как уже написал kvazimoda, если очередь пустая, то возвращается неизвестно что, то есть значение rc, которому не присваивалось никакое значение, значит, что там лежало в памяти, которая была выделена для rc, то и возвращается. Поэтому лучше там объявить не int rc; а int rc=0; Кстати, это не только в Deq, но и в Peek, хотя эта функция в программе вообще не используется, так что что там написано, никакого значения не имеет.

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

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Например, при просмотре очереди ты зачем-то удаляешь из нее все ее элементы.... Ну да это я понял, а вот как с этим бороться, не могу понять как по другому вывести очередь на экран . Из того что было я так понял что надо вот так :

for(int i=0;i<n;i++) {if (!q.isEmpty())cout<<Deq(q)<<' ';}system("PAUSE");break;

Ссылка на комментарий
Поделиться на другие сайты

Ну, функции распечатки очереди у тебя готовой нет, значит, надо написать самому. Например, по образцу

void AppendQueue(Queue& to, const Queue& from)  {for (int i = from.Head; i!= from.Tail; (++i)%from.Size)  Enq(to, from.Storage[i],from.Prioritet[i]); }

легко сделать так:

void PrintQueue(const Queue& from){for (int i = from.Head; i!= from.Tail; (++i)%from.Size) cout<<from.Storage[i]<<endl<<from.Prioritet[i])<<endl; }
Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Вставляешь функцию

void PrintQueue(const Queue& from){for (int i=from.Head; i!=from.Tail;(++i)%from.Size)cout<<from.Storage[i]<<endl<<from.Prioritet[i])<<endl; }

(кстати, у меня в исходном варианте была лишняя скобка, тут убрал) в свой код (только чтобы #include<iostream> и using namespace std; были до нее) и заменяешь выбор в меню при вводе 3 на

case 3:PrintQueue(q);cin.get();break;

P.S. Ан нет, не убрал лишнюю скобку, опять забыл. Удивительно упорная скобка ;) Правда, на нее сразу укажет компилятор - последняя закрывающая круглая скобка в теле PrintQueue, она лишняя. Убери ее сам, а тут пусть живет, раз уж так держится за жизнь :)

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Спасибо ! Получилось то что надо!

Мот у тя всё-таки получится из этого набора функций собрать нужное мне дерево:

Вершина бинарного дерева содержит ключ, строку и два указателя

на потомков. Написать функцию определения числа ветвей n-го

уровня этого дерева и вывода этих элементов на экран.

tree.txt

tree.txt

Ссылка на комментарий
Поделиться на другие сайты

benefit

Нечто сильно запутанное, при попытке использовать у меня зависало. Может быть, как-то связано с другим компилятором, но лучше все же использовать ранее написанную работающую программу, тем более что заданию она соответствует.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу



×
×
  • Создать...