temich5000 Опубликовано 15 декабря, 2011 Жалоба Поделиться Опубликовано 15 декабря, 2011 Всем привет !!!!!!!!!!!! Обьясните мне пож в данной программе условие где определение максимумов и наведение указателей code Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 15 декабря, 2011 Жалоба Поделиться Опубликовано 15 декабря, 2011 (изменено) temich5000 Pa[i]=&(a[i][0]); - заносит в итый указатель на целое адрес нулевого элемента итой строки массива if(a[i][j]>*(Pa[i])) Pa[i]=*(a+i)+j; - если текущий элемент массива больше элемента, на который указывает указатель, то указателю присваивается адрес этого элемента. Тут просто используются разные способы добраться до элемента - через квадратные скобки или с помощью арифметики указателей. Имя a при использовании в выражении приводится к типу указателя на первую строку массива, при добавлении i его значение изменяется на i длин строк массива, при разыменовании это значение приводится к типу указателя на первый элемент итой строки, к значению этого указателя прибавляется j длин элементов строки и результат заносится в указатель Pa. Вместо if(a[j]>*(Pa)) Pa=*(a+i)+j; можно было бы, в более привычных обозначениях, записать if(a[j]>*Pa)Pa=&a[j]; да и вообще обойтись без указателей. Но C++ создавался виртуозами программирования для таких же виртуозов, это язык трюков и простота понимания вообще не входила в цели его создателей. Поэтому в нем всегда "два пишем, три в уме". Например, попробуй вывести значение sizeof(a) и увидишь, что выведется размер всего массива. Что означает имя массива, зависит от того, где оно используется. Изменено 15 декабря, 2011 пользователем Тролль 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
vampir4eg Опубликовано 16 декабря, 2011 Жалоба Поделиться Опубликовано 16 декабря, 2011 1)что сдесь неправильно?? Проблема состоит в том ,что она работает только когда ввожу нечётное кол-во чисел, а когда чётное кол-во она вылетает a := true; x := spis^.data;// первый элемент spis := spis^.next; x1 := spis^.data;//второй элемент z := x1 - x;// разница между вторым и первым элементом while spis <> nil do begin //сдесь находим шаг прогрессии x := spis^.data; spis := spis^.next; x1 := spis^.data; spis := spis^.next; if x1 - x <> z then a := false; end; 2)доделать код Удаление листьев в указанном диапазоне чисел. Помогите поставить правильно условие, чтоб удалял листья в указанном диапазоне. Это функция удаляет все листы. function del_leaves(var Tree: AVLtree): boolean;var Lt, Rg: boolean;begin del_leaves := false; if tree = nil then exit; del_leaves := true; Rg := del_leaves(tree^.right); Lt := del_leaves(tree^.left); if not (Lt or Rg) then begin dispose(tree); tree := nil; end;end; 3) лексикографическая сортировка цепочек одинаковой длины.(тоесть как я понял, исходные цепочки cba bac abc --- отсортированые цепочки abc bac cba). В примере предоставленкод лексикографической сортировки цепочек разной длины. Помогите его переделать под мой вариан. begin//основная программа writeln('input the initial quantity of strings:'); readln(quant); for i:=1 to quant do//забиваем исходную последовательность цепочек begin write('input ',i,' string: '); readln(init_arr[i]); end; writeln('your initial sequence:'); for i:=1 to quant do write(init_arr[i],' '); writeln; maxlen:=0; for i:=1 to quant do//находим максимальную длину цепочки if length(init_arr[i])>maxlen then maxlen:=length(init_arr[i]); while (maxlen<>0) do//основной цикл, в котором в каждой новой итерации будем уменьшать значение maxlen (тут используется как индекс) begin kol:=0;//обнуляем при каждом новом входе в цикл for i:=1 to quant do//запись в очередь тех строк(цепочек), где код последнего символа равен нулю, т.е. этого символа нет if ord(init_arr[i][maxlen])=0 then begin writeO(buck,init_arr[i]); inc(kol); end; for i:=1 to quant do//запись в массивы очередей тех цепочек, код последнего символа которых не равен нулю if ord(init_arr[i][maxlen])<>0 then writeO(buck_arr[ord(init_arr[i][maxlen])],init_arr[i]); for i:=1 to kol do//считываем из очереди "нулевых кодов" в начало нашей исходной последовательности (массива) readO(buck,init_arr[i]); clearO(buck);//очищаем эту очередь i:=1;//теперь переменная i будет использоваться как "код ненулевого символа" inc(kol);//будет индексом для исходного массива в след. цикле while while (i<>256) do//пробегаем по всем кодам символов, которые в свою очередь являются индексами в массивах очередей begin if freeO(buck_arr[i])=false then//если очередная очередь непуста begin readO(buck_arr[i],init_arr[kol]);//то читываем из неё в наш исходный массив inc(kol); end; clearO(buck_arr[i]);//очищаем текущую "прочитанную" очередь inc(i);//переходим к след. коду end; maxlen:=maxlen-1;//уменьшаем максильмальную длину строки end; writeln('your sorted sequence:'); for i:=1 to quant do//вывод отсортированных цепочек write(init_arr[i],' ');end. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 17 декабря, 2011 Жалоба Поделиться Опубликовано 17 декабря, 2011 vampir4eg По первой явных ошибок не вижу. Попробуй вставить отладочную печать, возможно, в чем дело, прояснится. По второй - функция рекурсивна, значит, в нее надо вставить счетчик глубины рекурсии и выходить и по нему, когда глубина рекурсии превысит заданное значение, которое можно передать одним из параметров функции. По третьей - увы, с первого и даже со второго взгляда тут разобраться нелегко, надо постепенно менять и опять же тестировать. Честно говоря, это слишком крупные проекты, чтобы, не влезая в них с головой, просто их откорректировать. Ссылка на комментарий Поделиться на другие сайты Поделиться
carn Опубликовано 18 декабря, 2011 Жалоба Поделиться Опубликовано 18 декабря, 2011 Помогите сделать программу в Delphi я в нем вообще не разбегаюсь преложил результат программы , как она примерно должна выглядеть переведу, Elementu skaits - число Элементов Sastadit Masivu - Составить массив Izejošais masivs - Выходящий массив Kartibas seciba - Последовательность Augstoša seciba - Возрастная последовательность Dilstoša secība - Убывающяя последовательность если кто поможет , буду очень благодарен приложил файлкак примерно выглядит Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 19 декабря, 2011 Жалоба Поделиться Опубликовано 19 декабря, 2011 Помогите пожалуйста написать на Pascal Определить тип данных TDrib, описывающий целую часть, числитель и знаменатель несократимой дробного числа. Вычислить результат арифметического действия (+, -, *, /) над двумя значениями типа TDrib и представить в виде TDrib. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 20 декабря, 2011 Жалоба Поделиться Опубликовано 20 декабря, 2011 (изменено) Riki_Tiki_Tavi тип данных TDrib, описывающий целую часть, числитель и знаменатель несократимой дробного числаНу, тут совершенно непонятно, зачем хранить отдельно целую часть числа, когда можно обойтись двумя полями, храня дробное число в виде неправильной дроби, но раз в задании так, можно сделать по нему, хотя хранение рациональных чисел в виде смешанного числа нерационально (каламбурчик вышел ;) ). Основная сложность в программе - в работе с отрицательными числами, но вполне решаемо. type TDrib=record c,a,b:longint end;procedure tdra2c(var t:TDrib); begin t.c:=t.a div t.b; t.a:=t.a mod t.b; end; procedure tdrc2a(var t:TDrib); begin t.a:=t.c * t.b + t.a; end; procedure tdr_readln(var r:TDrib); var c,a,b:longint; beginb:=0; a:=0; if not eoln then read©;if not eoln then read(a); if not eoln then read(b); readln;if a=0 then begin a:=0; b:=1 end; if b=0 then begin b:=a; a:=c; c:=0 end;if c<>0 then begin a:=b*abs©+a; if c<0 then a:=-a; c:=0 end; r.a:=a; r.b:=b; tdra2c®end;procedure tdr_writeln(r:TDrib); begin tdrc2a®; with r do if b=1 then writeln(a) else if abs(a)<b then writeln(a,' ',b) else writeln(a div b,' ',abs(a) mod b,' ',b); end;procedure tdrnorm(var t:TDrib); var r,a,b:longint; p:TDrib; begin a:=t.a; b:=t.b; repeat r:=a mod b; a:=b; b:=r until b=0; t.a:=t.a div a; t.b:=t.b div a; if t.b<0 then begin t.a:=-t.a; t.b:=-t.b end; end;procedure tdr_sum(a,b:TDrib; var r:TDrib); begin tdrc2a(a); tdrc2a(b); r.a:=a.a*b.b+b.a*a.b; r.b:=a.b*b.b; tdrnorm®; tdra2c® end; procedure tdr_sub(a,b:TDrib; var r:TDrib); begin tdrc2a(a); tdrc2a(b); r.a:=a.a*b.b-b.a*a.b; r.b:=a.b*b.b; tdrnorm®; tdra2c® end; procedure tdr_mul(a,b:TDrib; var r:TDrib); begin tdrc2a(a); tdrc2a(b); r.a:=a.a*b.a; r.b:=a.b*b.b; tdrnorm®; tdra2c® end; procedure tdr_div(a,b:TDrib; var r:TDrib); begin tdrc2a(a); tdrc2a(b); r.a:=a.a*b.b; r.b:=a.b*b.a; tdrnorm®; tdra2c® end;var a,b,r:TDrib; begin write('a (one, two or three numbers)? '); tdr_readln(a); write('b (one, two or three numbers)? '); tdr_readln(b); write('sum= '); tdr_sum(a,b,r); tdr_writeln®; write('sub= '); tdr_sub(a,b,r); tdr_writeln®; write('mul= '); tdr_mul(a,b,r); tdr_writeln®; write('div= '); tdr_div(a,b,r); tdr_writeln®; readln;end. Процедуры tdrc2a и tdra2c переводят смешанное число в рациональное и обратно, процедура tdrnorm приводит дробь к несократимому виду, смысл остальных процедур понятен по их названиям. Числа вводятся и выводятся в виде одной, двух или трех частей в строку, например, -2 вводится как -2, а -¾ вводится как -3 4, а -2¾ вводится как -2 3 4. Таким же будет и вывод. Конечно, условие хранения целой части отдельно заметно усложняет программу и увеличивает потребность в памяти, поэтому приведу и более рационально сделанную программу с хранением тех же чисел в виде неправильно дроби. Ввод и вывод по-прежнему оставлен в виде смешанных чисел. type TDrib=record a,b:longint end;procedure tdr_readln(var r:TDrib); var c,a,b:longint; beginb:=0; a:=0; if not eoln then read©;if not eoln then read(a); if not eoln then read(b); readln;if a=0 then begin a:=0; b:=1 end; if b=0 then begin b:=a; a:=c; c:=0 end;if c<>0 then begin a:=b*abs©+a; if c<0 then a:=-a; c:=0 end; r.a:=a; r.b:=b;end;procedure tdr_writeln(r:TDrib); begin with r do if b=1 then writeln(a) else if abs(a)<b then writeln(a,' ',b) else writeln(a div b,' ',abs(a) mod b,' ',b); end;procedure tdrnorm(var t:TDrib); var r,a,b:longint; p:TDrib; begin a:=t.a; b:=t.b; repeat r:=a mod b; a:=b; b:=r until b=0; t.a:=t.a div a; t.b:=t.b div a; if t.b<0 then begin t.a:=-t.a; t.b:=-t.b end; end;procedure tdr_sum(a,b:TDrib; var r:TDrib); begin r.a:=a.a*b.b+b.a*a.b; r.b:=a.b*b.b; tdrnorm® end; procedure tdr_sub(a,b:TDrib; var r:TDrib); begin r.a:=a.a*b.b-b.a*a.b; r.b:=a.b*b.b; tdrnorm® end; procedure tdr_mul(a,b:TDrib; var r:TDrib); begin r.a:=a.a*b.a; r.b:=a.b*b.b; tdrnorm® end; procedure tdr_div(a,b:TDrib; var r:TDrib); begin r.a:=a.a*b.b; r.b:=a.b*b.a; tdrnorm® end;var a,b,r:TDrib; begin write('a (one, two or three numbers)? '); tdr_readln(a); write('b (one, two or three numbers)? '); tdr_readln(b); write('sum= '); tdr_sum(a,b,r); tdr_writeln®; write('sub= '); tdr_sub(a,b,r); tdr_writeln®; write('mul= '); tdr_mul(a,b,r); tdr_writeln®; write('div= '); tdr_div(a,b,r); tdr_writeln®; readln;end. P.S. Вообще заказчику полагается говорить лишь, что ему надо, а не как это сделать, иначе вместо лошади получается верблюд ;) Изменено 20 декабря, 2011 пользователем Тролль 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
temich5000 Опубликовано 23 декабря, 2011 Жалоба Поделиться Опубликовано 23 декабря, 2011 привет всем обьясните мне немного пожалуйста данную программу(свои комментарии написал как думаю) #include "stdafx.h"#include "string.h"#include "conio.h"#include "stdlib.h"#include "locale"int main(){setlocale(LC_ALL,"Russian"); //чтбы распозновался русский текст//--- Статический массив (инициализация при объявлении)printf("Статический массив (инициализация при объявлении)\n");const int p=4,q=255;// p-число q-максимальная длинаchar arr[q];//массивchar country[p][q]={"Россия","Греция","Чехия","Польша"};printf("Исходные строки: \n\n");for (int i=0;i<p;i++) printf("%s\n",country[i]);for (int i=0;i<p;i++) for (int j=0;j<p-1;j++) if (strcmp(country[j],country[j+1])>0) //функция сравнения cтрок { strcpy(arr,country[j]); //меняем местами элементы массива strcpy(country[j],country[j+1]); strcpy(country[j+1],arr); }printf("\nСтроки после сортировки: \n\n");for (int i=0;i<p;i++) printf("%s\n",country[i]);//--- Динамический массив (инициализация с клавиатуры) printf("\nДинамический массив (инициализация вводом с клавиатуры)\n");int n;printf("Введите количество строк___");scanf("%i",&n);printf("Введите %i элемента(ов) строкового массива (после ввода нажать Enter)\n", n);char** c=new char*[n];//захватываем массив из n указателей на char и присваиваем это указателю на указатель на char for (int i=0;i<n+1;i++) c[i]= new char[20]; //захватывем целочисленный массив в динамической памяти из 20 элементовfor (int i=0;i<n+1;i++) gets(c[i]);//ввод с клавиатуры элементов массиваchar* temp; //уазатель на charfor (int i=0;i<n+1;i++) for (int j=0;j<n;j++) if (strcmp(c[j],c[j+1])>0)//сравнение строк { temp=c[j]; //метод пузырька c[j]=c[j+1]; c[j+1]=temp; }printf("\nСтроки после сортировки:\n");for (int i=0;i<n+1;i++) printf("%s\n",c[i]);for (int i=0;i<n+1;i++) delete c[i];getchar();} Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 24 декабря, 2011 Жалоба Поделиться Опубликовано 24 декабря, 2011 (изменено) temich5000 Комментарии правильные, хотя "захватываем массив из n указателей на char и присваиваем это указателю на указатель на char" и "захватывем целочисленный массив в динамической памяти" я бы заменил на "размещаем в динамической памяти массив указателей на char и присваиваем его адрес указателю" и "размещаем в динамической памяти массив char и присваиваем его адрес указателю" соответственно. В конце программы освобождение динамической памяти проведено неправильно, память так может быть освобождена только частично. В принципе явное освобождение памяти в конце программы необязательно, так как память автоматически освободится при завершении программы, но если правильно освобождать память в программе, то вместо for (int i=0;i<n+1;i++) delete c[i]; должно быть for (int i=0;i<n+1;i++) delete [] c[i];delete [] c; P.S. [] в delete показывает компилятору, что надо освободить память для всего массива, а не только для того элемента массива, адрес которого содержится в указателе. Изменено 24 декабря, 2011 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
temich5000 Опубликовано 24 декабря, 2011 Жалоба Поделиться Опубликовано 24 декабря, 2011 Тролль спасибо бльшое за ответ !!!!!! а подскажи пожалуйста как "размещаем в динамической памяти массив указателей на char и присваиваем его адрес указателю" и "размещаем в динамической памяти массив char и присваиваем его адрес указателю" как это будет выглядеть в графической интнрпритации(а то нас преподаватель заставляет рисовать такие вещи ) если не сложно.... Ссылка на комментарий Поделиться на другие сайты Поделиться
AntonyDed Опубликовано 25 декабря, 2011 Жалоба Поделиться Опубликовано 25 декабря, 2011 Здравствуйте. Помогите решить задачу в паскале Найти все неповторяющиеся элементы двумерного массива целых чисел размерностью 6*3 . Заполнение массива осуществить с клавиатуры. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 25 декабря, 2011 Жалоба Поделиться Опубликовано 25 декабря, 2011 temich5000 Тут рисовать особенно нечего... Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 25 декабря, 2011 Жалоба Поделиться Опубликовано 25 декабря, 2011 (изменено) AntonyDed const m=6; n=3; var a:array[1..m,1..n]of integer; i1,i2,i3,i4,k:integer; beginfor i1:=1 to m do for i2:=1 to n do begin write('Enter ',n,' values of the line ',i1:2,' : '); for i2:=1 to n do read(a[i1,i2]); readln end;writeln; writeln('The nonrecurrent values:');for i1:=1 to m do for i2:=1 to n do begin k:=0; for i3:=1 to m do for i4:=1 to n do if a[i3,i4]=a[i1,i2] then inc(k); if k=1 then write(a[i1,i2]:8) end;writeln; readlnend. temich5000 Тут рисовать особенно нечего. Изменено 25 декабря, 2011 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 25 декабря, 2011 Жалоба Поделиться Опубликовано 25 декабря, 2011 в pascal Построить таблицу значений функции f (x) на отрезке [a, b] с шагом h, найти наибольшее и наименьшее значение функции на этом отрезке. Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 25 декабря, 2011 Жалоба Поделиться Опубликовано 25 декабря, 2011 в pascal Построить таблицу значений функции f (x) на отрезке [a, b] с шагом h, найти наибольшее и наименьшее значение функции на этом отрезке. Ответ вывести на экран и сохранить в файле, в виде Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 25 декабря, 2011 Жалоба Поделиться Опубликовано 25 декабря, 2011 Riki_Tiki_Tavi var x,y,ymin,ymax:real; i:integer; f:text;begin ymin:=2; ymax:=0; assign(f,'func.txt'); rewrite(f);writeln(' x f(x)'); writeln('---------------');writeln(f,' x f(x)'); writeln(f,'---------------');for i:=300 div 20 to 600 div 20 do begin x:=20*i; y:=sqr(sin(x))+cos(x); if y>=0 then begin y:=sqrt(y); writeln(x:6:1,y:11:7); writeln(f,x:6:1,y:11:7); if ymin>y then ymin:=y; if ymax<y then ymax:=y; end else begin writeln(x:6:1,' not exist'); writeln(f,x:6:1,' not exist'); end; end;writeln('-------------------'); writeln('maximum=',ymax:0:7,' minimum=',ymin:0:7);writeln(f,'-------------------'); writeln(f,'maximum=',ymax:0:7,' minimum=',ymin:0:7); close(f); readln end. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
temich5000 Опубликовано 25 декабря, 2011 Жалоба Поделиться Опубликовано 25 декабря, 2011 Ребят, посмотрите, пожалуйста, правильные ли сделал комментарии #include "stdafx.h"int main(){int*Pmas = new int[2];//размещяем в динамической памяти массив int состоящий из 2-х элементов и присваиваем его адрес указателюfor(int i=0;i<2;i++) //инициализация одномерного массива{ *(Pmas+i)=i+1;//смещение указателя printf(" %i\t",*(Pmas+i));//вывод на экран элементов массива}printf("\n\n");int **p=new int*; ];//размещяем в динамической памяти массив указателей на int и присваиваем его адрес указателю*p=new int[2];//выделение в динамической памяти области из 2-х элементов типа int //указатель в динамической памяти указывает на первый элемент этого массиваfor(int i=0;i<2;i++)//инициализация одномернго массива в динамической памяти{ *(*p+i)=i+4;// смещение указателяprintf(" %i\t",*(*p+i));//вывод на экран элементов массива}getchar();delete(Pmas);//освобождаем динамическую память по указателюdelete(p); Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 25 декабря, 2011 Жалоба Поделиться Опубликовано 25 декабря, 2011 int **p=new int*; ];//размещяем в динамической памяти массив указателей на int и присваиваем его адрес указателю Это все же не массив указателей на int, а просто один указатель. Одна ласточка массива не делает ;) Ну и опять с освобождением: освобождаешь память int*Pmas = new int[2] - полагается писать delete [] Pmas; освободил память указателя *p, на которую указывал указатель p - остались висеть в памяти элементы массива int[2], на который указывал указатель *p, их надо было освободить до этого командой delete [] (*p); Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 26 декабря, 2011 Жалоба Поделиться Опубликовано 26 декабря, 2011 Помогите решить задачу в паскале. Извините что на укр. нужно использовать эти функции Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 26 декабря, 2011 Жалоба Поделиться Опубликовано 26 декабря, 2011 (изменено) Помогите решить задачу в паскале.Извините что на укр. Тут условия задачи нет ни на каком языке. Табличку значений функции, конечно, несложно вывести: var x,y:real; i:integer; begin writeln(' x f(x)');for i:=20 to 40 do begin x:=1.5*i; y:=sqrt(sqr(sin(x*pi/180))+cos(x*pi/180)); writeln(x:6:1,y:11:7); end;readln end. Возможно, это все, что надо, потому что всякие описания вроде того, что слово Integral означает интеграл, к табличке никак не относятся, это скорее всего для других вариантов. Изменено 26 декабря, 2011 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
temich5000 Опубликовано 26 декабря, 2011 Жалоба Поделиться Опубликовано 26 декабря, 2011 Спасибо за ответ Тролль !!!!!!!! а в графической части как всё будет выглядеть ( там где комментарии мои про указатели)?? т.е. int*Pmas = new int[2]; int **p=new int*; *p=new int[2]; Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 27 декабря, 2011 Жалоба Поделиться Опубликовано 27 декабря, 2011 temich5000 Можно это нарисовать как ниже. Хотя как у вас принято рисовать, я не знаю, все эти рисунки - просто эскизы для лучшего понимания материала, каждый может рисовать по-своему, так что лучше посмотри в конспекте, в каком виде их рисовали вам. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
vampir4eg Опубликовано 27 декабря, 2011 Жалоба Поделиться Опубликовано 27 декабря, 2011 Дан бинарный файл с вещественными числами одинарной точности. Вывести в файл значения элементов находящихся между макс и мин элементами причем в обратном порядке. Имя файла вводится в командной строке. Файл сохдать можете сами. Дан массив целых чисел. Размер массива и его содержимое вводит пользователь. Отсортировать массив так, чтобы сначала шли положительные числа в порядке убывания, а затем отрицательные числа в порядке возрастания. Вывести в файл элементы отсортированного массива, стоящие на четных местах. Имя файла задается параметром командной строки. Ссылка на комментарий Поделиться на другие сайты Поделиться
M2rg Опубликовано 28 декабря, 2011 Жалоба Поделиться Опубликовано 28 декабря, 2011 MATLAB Доброе врямя суток Есть задача: В некотором тексте (например, Когда отладка завершена, ком¬пьютер, несомненно, решает какую-то задачу) подсчитайте число сдвоенных символов. Есть решение на паскале: k:=0;for i:=2 to length(s) doif (s[i]=s[i-1])then k:=k+1 Помогите перевести на matlab Ссылка на комментарий Поделиться на другие сайты Поделиться
temich5000 Опубликовано 28 декабря, 2011 Жалоба Поделиться Опубликовано 28 декабря, 2011 Ребят, посмотрите, пожалуйста, правильные ли сделал комментарии int***a; //указатель на массив указателей на массив указателейint**tM[2];//массив указателей на массив указателейint*M[2*3]; //массив указателей time_t t; int i,j,k;srand( (unsigned) time(&t));a=&tM[0];//этот указатель будет использован в качестве имени конечного массиваfor (i=0; i<2; i++)//инициализация массива указателей на массив указателей *(a+i)=&M[i*3];//не очень понимаю что здесь происходит…for(int i=0;i<2;i++)//выделение области в динамической памяти под числовой массив for (j=0;j<3;j++) *(*(a+i)+j)=new int [4]; //не очень понимаю что здесь происходит…printf("part 1: \n"); for (i=0;i<2;i++)//инициализация и вывод на экран конечного трехмерного массива { for (j=0;j<3;j++) { for (k=0;k<4;k++) { *(*(*(a+i)+j)+k)=rand()%10; //доступ к i,j,k-ой ячейке путем смещения указателя a printf(" %i\t", *(*(*(a+i)+j)+k) ); } printf("\n"); } printf("\n"); } Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти