vampir4eg Опубликовано 3 июня, 2012 Жалоба Поделиться Опубликовано 3 июня, 2012 есть задачка по асемблеру: Реализовать процедуру, определяющую максимальную цифру (десятичная система) в целочисленном значении типа word, переданном в параметре. Используя данную процедуру обработать 10 чисел, значение которых жестко кодируется в программе. Результат вывести на экран. (При реализации всех процедур передачу параметров реализовать через стек. Процедуры возвращают целочисленные значения регистр AX, остальные значения возвращаются через параметр по ссылке (адрес, куда необходимо записать результат, передается в параметре процедуры)) для кода надо использовать16 сегмент то есть .486 model small Data SEGMENT use16 ASSUME ds:Data Говорят что асемблер он очень простой язык ,но для меня он не понятен )) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 4 июня, 2012 Жалоба Поделиться Опубликовано 4 июня, 2012 (изменено) миклух Дописывать твою программу не буду, но у тебя соответственно последняя запись первого списка должна указывать, насколько я понял задание, на начало второго списка, конец второго списка должен указывать на начало третьего, а конец третьего - на начало первого. Это можно сделать уже после создания трех списков. То есть NULL в конце заменить на адрес начала следующего списка. И чтобы знать, где какой начинается и когда он кончается, нужны три указателя на начала разделов кольцевого списка. Что мне осталось непонятным, это смысл делать из трех разных частей одно кольцо... Изменено 4 июня, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
rainbow012 Опубликовано 5 июня, 2012 Жалоба Поделиться Опубликовано 5 июня, 2012 Помогите, пожалуйста, написать следующие задачи на паскале: 1). Записать на место первого положительного элемента массива Z(13) максимальный элемент матрицы R[10x15]; 2). В каждом столбце матрицы R [15х20] поменять местами максимальный и минимальный элементы. Заранее спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
medvedkotracer Опубликовано 5 июня, 2012 Жалоба Поделиться Опубликовано 5 июня, 2012 @Тролль, огромное человеческое спасибо за комментарии. Можно ещё попросить? Задание такое: Ввести строку и слово. Вывести только те слова, середина которых совпадает с введенным словом. Функции из String.h не использовать Написать на C. Заранее спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 6 июня, 2012 Жалоба Поделиться Опубликовано 6 июня, 2012 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. Ссылка на комментарий Поделиться на другие сайты Поделиться
rainbow012 Опубликовано 6 июня, 2012 Жалоба Поделиться Опубликовано 6 июня, 2012 @Тролль, Огромное Вам Спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
vampir4eg Опубликовано 6 июня, 2012 Жалоба Поделиться Опубликовано 6 июня, 2012 .#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();} Как говорится чем дальше в лес ,тем больше дров)) сейчас задача более не функцианальней чем была( не сочти за упрёк), то есть уже отказывается считать выражения со скобками и не делит на отриц число) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 6 июня, 2012 Жалоба Поделиться Опубликовано 6 июня, 2012 (изменено) vampir4eg Я же тебе посылал в ЛС ссылку на работающий вариант, а сейчас мы, похоже, переделываем другой, плохо работающий, оттуда же. Не исключено, что горбатого могила исправит, тем более, что ему есть замена . Я тебе послал ЛС, давай продолжим там. Изменено 6 июня, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Raftko Опубликовано 7 июня, 2012 Жалоба Поделиться Опубликовано 7 июня, 2012 Всем доброго времени суток! У меня будет очень срочная и довольно-таки извращённая просьба. Есть скрипт перловский, нужно переписать его для дельфи, а то диплом пролетает как фанера над Парижем:) 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"; Ссылка на комментарий Поделиться на другие сайты Поделиться
wedma Опубликовано 9 июня, 2012 Жалоба Поделиться Опубликовано 9 июня, 2012 Здравствуйте! У меня просьба. Нужно до завтра. Необходимо программы на языке С переделать в С++ и написать небольшие комментарии, что на каждом этапе выполняется, чтобы можно было понять, как она работает. Примерно такие: //определяем случайный элемент массива 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();} И подскажите ссылку, где можно нормальный С++ скачать... Либо из-за того что нетбук, либо из-за того, что семерка, но ничего не работает =( Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 9 июня, 2012 Жалоба Поделиться Опубликовано 9 июня, 2012 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++ она больше не поддерживает, так что я бы установил более старую версию по первой ссылке. Ссылка на комментарий Поделиться на другие сайты Поделиться
wedma Опубликовано 9 июня, 2012 Жалоба Поделиться Опубликовано 9 июня, 2012 @Тролль, просто в значке программы написано С source file, а не С++, как обычно. За ссылку спасибо, открывает, но все-равно не работает =( Ссылка на комментарий Поделиться на другие сайты Поделиться
wedma Опубликовано 9 июня, 2012 Жалоба Поделиться Опубликовано 9 июня, 2012 (изменено) @Тролль, По 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) Выполнение завершено Изменено 9 июня, 2012 пользователем wedma Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 9 июня, 2012 Жалоба Поделиться Опубликовано 9 июня, 2012 wedma А. так у тебя файл называется Сканеры.c Это указывает компилятору, что для этого файла надо использовать не компилятор C++, а компилятор С. Переименуй файл к расширению cpp Ссылка на комментарий Поделиться на другие сайты Поделиться
benefit Опубликовано 10 июня, 2012 Жалоба Поделиться Опубликовано 10 июня, 2012 Троль есть к тебе ещё один вопрос по очереди . Программа вроде всё рабочая но при выполнении нескольких действий вылетает ошика...Действия типа : создать очередь , просмотреть очеречь а после них жмёшь удалить и выскакивает обибка. Что ето может быть ? Безымянный.bmp Безымянный.bmp Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 10 июня, 2012 Жалоба Поделиться Опубликовано 10 июня, 2012 Ну, тебе же написали, что переменная rc была использована до того как была проинициализирована. Ссылка на комментарий Поделиться на другие сайты Поделиться
benefit Опубликовано 10 июня, 2012 Жалоба Поделиться Опубликовано 10 июня, 2012 что там написано понятно а вот как с этим бороться вот весь код програмы очередь с приоритетом.txt очередь с приоритетом.txt Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 10 июня, 2012 Жалоба Поделиться Опубликовано 10 июня, 2012 Подозреваю, что в этом куске кода есть ошибка 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", а правильно ли это, я не знаю. Я не программист :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 11 июня, 2012 Жалоба Поделиться Опубликовано 11 июня, 2012 (изменено) benefit Как уже написал kvazimoda, если очередь пустая, то возвращается неизвестно что, то есть значение rc, которому не присваивалось никакое значение, значит, что там лежало в памяти, которая была выделена для rc, то и возвращается. Поэтому лучше там объявить не int rc; а int rc=0; Кстати, это не только в Deq, но и в Peek, хотя эта функция в программе вообще не используется, так что что там написано, никакого значения не имеет. Мне, правда, кажется, что это не единственная ошибка в программе. Например, при просмотре очереди ты зачем-то удаляешь из нее все ее элементы, скорее всего поэтому у тебя и возникает ошибка при попытке удаления элемента из пустой очереди, так что вставь проверку, что элемент должен удаляться только если очередь не пустая. Изменено 11 июня, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
benefit Опубликовано 11 июня, 2012 Жалоба Поделиться Опубликовано 11 июня, 2012 Например, при просмотре очереди ты зачем-то удаляешь из нее все ее элементы.... Ну да это я понял, а вот как с этим бороться, не могу понять как по другому вывести очередь на экран . Из того что было я так понял что надо вот так : for(int i=0;i<n;i++) {if (!q.isEmpty())cout<<Deq(q)<<' ';}system("PAUSE");break; Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 11 июня, 2012 Жалоба Поделиться Опубликовано 11 июня, 2012 (изменено) Ну, функции распечатки очереди у тебя готовой нет, значит, надо написать самому. Например, по образцу 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; } Изменено 11 июня, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
benefit Опубликовано 11 июня, 2012 Жалоба Поделиться Опубликовано 11 июня, 2012 Чёт все равно ни как ..... не пойму куда всовывать.... объясни подробнее Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 11 июня, 2012 Жалоба Поделиться Опубликовано 11 июня, 2012 (изменено) Вставляешь функцию 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, она лишняя. Убери ее сам, а тут пусть живет, раз уж так держится за жизнь :) Изменено 12 июня, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
benefit Опубликовано 13 июня, 2012 Жалоба Поделиться Опубликовано 13 июня, 2012 Спасибо ! Получилось то что надо! Мот у тя всё-таки получится из этого набора функций собрать нужное мне дерево: Вершина бинарного дерева содержит ключ, строку и два указателя на потомков. Написать функцию определения числа ветвей n-го уровня этого дерева и вывода этих элементов на экран. tree.txt tree.txt Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 14 июня, 2012 Жалоба Поделиться Опубликовано 14 июня, 2012 (изменено) benefit Нечто сильно запутанное, при попытке использовать у меня зависало. Может быть, как-то связано с другим компилятором, но лучше все же использовать ранее написанную работающую программу, тем более что заданию она соответствует. Изменено 14 июня, 2012 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти