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

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


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

Всем привет !!!!!!!!!!!!

Обьясните мне пож в данной программе условие где определение максимумов и наведение указателей

code

5.JPG

post-91959-0-23039200-1323962050_thumb.j

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

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) и увидишь, что выведется размер всего массива. Что означает имя массива, зависит от того, где оно используется.

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

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.
Ссылка на комментарий
Поделиться на другие сайты

vampir4eg

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

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

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

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

Помогите сделать программу в Delphi

я в нем вообще не разбегаюсь

преложил результат программы , как она примерно должна выглядеть

переведу, Elementu skaits - число Элементов

Sastadit Masivu - Составить массив

Izejošais masivs - Выходящий массив

Kartibas seciba - Последовательность

Augstoša seciba - Возрастная последовательность

Dilstoša secība - Убывающяя последовательность

если кто поможет , буду очень благодарен

приложил файлкак примерно выглядит

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

Помогите пожалуйста написать на Pascal

Определить тип данных TDrib, описывающий целую часть, числитель и знаменатель несократимой дробного числа.

Вычислить результат арифметического действия (+, -, *, /) над двумя значениями типа TDrib и представить в виде TDrib.

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

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. Вообще заказчику полагается говорить лишь, что ему надо, а не как это сделать, иначе вместо лошади получается верблюд ;)

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

привет всем обьясните мне немного пожалуйста данную программу(свои комментарии написал как думаю)

#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();}
Ссылка на комментарий
Поделиться на другие сайты

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 показывает компилятору, что надо освободить память для всего массива, а не только для того элемента массива, адрес которого содержится в указателе.

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

Тролль спасибо бльшое за ответ !!!!!!

а подскажи пожалуйста как "размещаем в динамической памяти массив указателей на char и присваиваем его адрес указателю" и "размещаем в динамической памяти массив char и присваиваем его адрес указателю" как это будет выглядеть в графической интнрпритации(а то нас преподаватель заставляет рисовать такие вещи ) если не сложно....

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

Здравствуйте. Помогите решить задачу в паскале

Найти все неповторяющиеся элементы двумерного массива целых чисел размерностью 6*3 . Заполнение массива осуществить с клавиатуры.

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

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

Тут рисовать особенно нечего.

t.gif

post-1208-0-99064100-1324813647_thumb.gi

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

в pascal

Построить таблицу значений функции f (x) на отрезке [a, b] с шагом h, найти наибольшее и наименьшее значение

функции на этом отрезке.

b79bbfaac01f.jpg

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

в pascal

Построить таблицу значений функции f (x) на отрезке [a, b] с шагом h, найти наибольшее и наименьшее значение

функции на этом отрезке.

b79bbfaac01f.jpg

Ответ вывести на экран и сохранить в файле, в виде 60ebf48e3036.jpg

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

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.
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Ребят, посмотрите, пожалуйста, правильные ли сделал комментарии

#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);
Ссылка на комментарий
Поделиться на другие сайты

int **p=new int*; ];//размещяем  в динамической памяти массив указателей на  int и присваиваем его адрес указателю

Это все же не массив указателей на int, а просто один указатель. Одна ласточка массива не делает ;)

Ну и опять с освобождением: освобождаешь память int*Pmas = new int[2] - полагается писать delete [] Pmas;

освободил память указателя *p, на которую указывал указатель p - остались висеть в памяти элементы массива int[2], на который указывал указатель *p, их надо было освободить до этого командой delete [] (*p);

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

Помогите решить задачу в паскале.

Извините что на укр.

f0676aee8864.jpg

нужно использовать эти функции

6eb15faa97f7.jpg

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

Помогите решить задачу в паскале.

Извините что на укр.

Тут условия задачи нет ни на каком языке. Табличку значений функции, конечно, несложно вывести:
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 означает интеграл, к табличке никак не относятся, это скорее всего для других вариантов.

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

Спасибо за ответ Тролль !!!!!!!!

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

т.е.

int*Pmas = new int[2]; int **p=new int*;   *p=new int[2];
Ссылка на комментарий
Поделиться на другие сайты

temich5000

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

a.gif

post-1208-0-11863300-1324976716_thumb.gi

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

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

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

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

MATLAB

Доброе врямя суток

Есть задача:

В некотором тексте (например, Когда отладка завершена, ком¬пьютер, несомненно, решает какую-то задачу) подсчитайте число сдвоенных символов.

Есть решение на паскале:

 k:=0;for i:=2 to length(s) doif (s[i]=s[i-1])then k:=k+1

Помогите перевести на matlab

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

Ребят, посмотрите, пожалуйста, правильные ли сделал комментарии

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"); }
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

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



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