Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Студентам с лабораторными сюда (https://forum.antichat.xyz/showthread.php?t=122076)

_Great_ 20.06.2007 14:25

Студентам с лабораторными сюда
 
В этой теме можно просить (если нужно) помощи в написании какой-либо лабораторной работы в институте-школе-где еще по программированию на С/С++/Delphi/Asm.

Просьбы вне этой темы будут удаляться либо объединяться с этой темой, а авторы наказываться, поскольку они (темы, да и авторы тоже) засоряют раздел.

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

n3m0 21.06.2007 09:52

Срочно нужна помощь
Нада нарисовать на ПАскале множество точек координат на 2(|y|+|x|)>=x^ + y^>=4
где >= - больше-равно, ^ - в квадрате
Помоите срочно

NetMan 21.06.2007 14:53

n3mo > Проверь:
Код:

uses crt,graph;
const
        h=0.01;
        scale=100;
var GrDr,GrM,CX,CY:integer;
    a,b,x,y:real;
begin
        GrDr:=9;
        GrM:=2;
        initgraph(GrDr,GrM,'');

        CX:=round(GetMaxX/2);
        CY:=round(GetMaxY/2);

        moveto(CX-scale*2,CY);
        linerel(scale*2,-scale*2);
        linerel(scale*2,scale*2);
        linerel(-scale*2,scale*2);
        linerel(-scale*2,-scale*2);
        circle(CX,CY,scale*2);
        x:=-2;
        y:=-2;
        repeat
          repeat
          a:=2*(abs(x)+abs(y));
          b:=sqr(x)+sqr(y);
          if (a>=b) and (b>=4) then
                putpixel(CX+round(x*scale),CY+round(y*scale),15);
          x:=x+h;
          until x>2;
        y:=y+h;
        until y>2;
        readln;
        closegraph;
end.


Ch3ck 21.06.2007 14:55

Сразу же залью множетсво программ на С++ (Самые первые лабароторки везде.)
Список:
Код:

Задание №1.
Табулирование функции.
Вычислить таблицу значений функции y=f(x) для значений аргумента X,
изменяющегося в интервале от Xнач до Xкон c шагом dX. Для вычисления
функции использовать подпрограмму, т.е. ввести функцию пользователя F(x).

вариант    вид функции      Xнач    Xкон    dX
00        y=2x/(1=sin(x/3))  1,3    6,5    0,5
01        y=0,7(1/x+lnx)    14      34      2,5
02        y=2x(1+cos(x/2))  0,9    5,5    0,5
03        y=2x(1+sin(x/3))  1,7    6,3    0,5
04        y=2,5/(1/x+lnx)    12      25      2,5
05        y=2x/(2+cos(x/2))  0,9    5,6    0,5
06        y=0,7(3x+1/lnx)    10      19      1,5
07        y=2x(1+cos(x/2))  0,9    5,5    0,5
08        y=1/x+2cos(x)      12      25      2,5
09        y=2x(0,5*x+cosx)  1,5    6,5    0,5
10        y=0,9(3/x+lnx)    13      34      2,5
11        y=2x(3+sin(x/3))  1,7    6,3    0,5
12        y=0,5/(1/x+lnx)    10      25      1,5
13        y=2x/(2+sin(x/2))  0,7    5,6    0,5
14        y=0,7(3x+1/lnx)    10      19      1,5
15        y=5x(2+cos(x/2))  0,5    5,5    0,5

Задание №2.
Обработка одномерного массива.
Ввести одномерный массив X, содержащий 9 вещественных чисел.
Выполнить обработку по варианту. Исходный массив и результаты
вывести на экран.

вариант    содержание задания
00          Найти сумму отрицательных и произведение положительных
            чисел массива.
01          Найти минимальное число массива.
02          Подсчитать количество чисел, равных 5.
03          Найти сумму элементов с чётными номерами.
04          Найти среднее арифметическое всех положительных чисел
            массива.
05          Определить количество положительных и количество
            отрицательных чисел массива.
06          Вывести на экран номера чисел, равных 0.
07          Преобразовать массив, расположив в нём числа
            в обратной последовательности.
08          Преобразовать массив, заменив все отрицательные числа
            на -1, а положительные на 1.
09          Вывести на экран числа, встречающиеся в массиве
            более одного раза.
10          Преобразовать массив, расположив сначала все отрицательные,
            затем все положительные числа (порядок следования чисел
            внутри группы не изменять).
11          Заменить все отрицательные числа их модулем.
12          Найти минимальное число массива и его порядковый номер.
13          Заменить все отрицательные числа на нулевые.
14          Подсчитать количество чисел больших 10.
15          Найти среднее арифметическое всех отрицательных
            чисел массива.

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

вариант    содержание задания
00          Сформировать одномерный массив, состоящий из максимальных
            чисел каждой строки.
01          Сформировать одномерный массив, состоящий из максимальных
            чисел каждого столбца.
02          Преобразовать массив: элементы строки, в которой находится
            максимальный элемент матрицы, заменить на нули.
03          Преобразовать массив: элементы того столбца, в котором
            находится максимальный элемент матрицы, заменить на нули.
04          Каждый столбец матрицы упорядочить по убыванию.
05          Каждую строку матрицы упорядочить по убыванию.
06          Преобразовать массив: разделить элементы каждого столбца
            заданной матрицы на последний элемент столбца.
07          Преобразовать массив: разделить элементы каждой строки
            матрицы на последний элемент этой строки.
08          Определить количество нулевых чисел в каждой строке
            матрицы.
09          Определить количество нулевых чисел в каждом столбце
            матрицы.
10          Сформировать массив, состоящий из сумм положительных чисел
            каждого столбца.
11          Сформировать массив, состоящий из сумм отрицательных чисел
            каждой строки.
12          Найти среднее арифметическое положительных чисел каждой
            строки.
13          Найти среднее арифметическое положительных членов каждого
            столбца.
14          Преобразовать массив, умножив элементы каждой строки на
            минимальный элемент этой строки.
15          Преобразовать массив, умножив элементы каждого столбца на
            минимальный элемент этого столбца.

Скачать => ТУТ <=

Ch3ck 22.06.2007 11:39

Куча лабораторных работ на ПАСКАЛЕ.

http://weppc.jino-net.ru/pasworks.rar


Fire3d 23.06.2007 17:01

Программа вопросов )
 
Внимение задчка по turbo pascal )
Воть надо сделать програму в каторый содержится к примеру 5 вапросов и 10 вариантов ответа. Теперь вопрос как сделать чтобы программа понила что ответ правильный....
В конце выведится количество правильныйх ответов на вопросы.
хМ как сделать это подксажите.

NetMan 23.06.2007 17:11

Надо хранить вопросы, ответы и номер правильного ответа в файле.

Joker-jar 23.06.2007 17:12

Цитата:

как сделать чтобы программа понила что ответ правильный
Читай про условия :)

Цитата:

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

Fire3d 23.06.2007 17:13

Цитата:

uses crt;
var a,b,c:integer;
begin
clrscr;
a:=0;
write('кушаеш? ');
write('1:da ');
write(' 2:HET ');
read(a);
clrscr;
write(' хакер?');
write(' 1:HET ');
write(' 2:da ');
read(a);
clrscr;
a:=a+a;
write(a);
end.
Хм может быть так ? но как тогда сделать правильный или не правильный ответ ?

Joker-jar 23.06.2007 17:27

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

Fire3d 23.06.2007 17:30

Цитата:

Сообщение от Joker-jar
Объяви структуру, которая содержит: текст вопроса, тексты вариантов ответа, номер правильного ответа. Создай файл объявленных структур. Отдельной программой наполни файл вопросами.
При ответе сверяй ответ с правильным ответом, если ок, инкрементируй счетчик.

Джокер мы еще не проходили работу с файлами...
Другой способ есть ?

Joker-jar 23.06.2007 17:39

Тогда все в виде констант. Можно в виде массива
Код:

TQuestion = record
  Text, Ans1, Ans2, Ans3, Ans4: string;
  RightAns: 1..4;
end;
...
QArray: array[1..10] of TQuestion;

При запуске программы заполняй чем надо.

Fire3d 23.06.2007 17:41

Цитата:

Сообщение от Joker-jar
Тогда все в виде констант. Можно в виде массива
Код:

TQuestion = record
  Text, Ans1, Ans2, Ans3, Ans4: string;
  RightAns: 1..4;
end;
...
QArray: array[1..10] of TQuestion;

При запуске программы заполняй чем надо.

Ясно наверное я рано взялся за такое задние ((( Только сегодня массивы прошли (((

Joker-jar 23.06.2007 17:41

Хотя, если у тебя вопросы типа ДА/НЕТ, то там проще

Fire3d 23.06.2007 17:45

Цитата:

Сообщение от Joker-jar
Хотя, если у тебя вопросы типа ДА/НЕТ, то там проще

Ну для начала... я хотел начать с ДА/НЕТ.

md5f1h 23.06.2007 17:50

Нужна помошь
 
задание тут http://www.permcity.info/help.jpg если кто-нибудь сделает хотяб что нибудь из этой работы буду плюсовать каждый день тому человеку

Joker-jar 23.06.2007 18:01

Fire3d, написал небольшой примерчик:
Код:

const
  Tqs: array[1..5] of string = ('Vopros 1','Vopros 2','Vopros 3','Vopros 4','Vopros 5');
  Tans: array[1..5] of boolean = (true,true,false,true,false);

var
  s: string;
  i,count: integer;

begin
  writeln('Otvet: y or n');
  for i := 1 to 5 do
    begin
      writeln(Tqs[i]);
      readln(s);
      if ((s = 'y')and(Tans[i]))or((s = 'n')and(not Tans[i])) then
        count := count + 1;
    end;
  writeln('Right answers: ',count);
  readln;
end.


Fire3d 23.06.2007 18:17

Цитата:

Сообщение от Joker-jar
Fire3d, написал небольшой примерчик:
Код:

const
  Tqs: array[1..5] of string = ('Vopros 1','Vopros 2','Vopros 3','Vopros 4','Vopros 5');
  Tans: array[1..5] of boolean = (true,true,false,true,false);

var
  s: string;
  i,count: integer;

begin
  writeln('Otvet: y or n');
  for i := 1 to 5 do
    begin
      writeln(Tqs[i]);
      readln(s);
      if ((s = 'y')and(Tans[i]))or((s = 'n')and(not Tans[i])) then
        count := count + 1;
    end;
  writeln('Right answers: ',count);
  readln;
end.


Спасибо когда приду дмоой сразу научну разбирать твой код. А тут вопросы можно задавать по коду ??? Просто некторый моменты мне не понятны....

Joker-jar 23.06.2007 18:27

md5f1h, с нуля вряд ли кто-то будет делать. По отдельным вопросам обращайся, помогут.

da_ff 24.06.2007 00:06

2 Fire3d вот два теста может помогут писал очень давно но если че стукни в асю http://dobropozalovat.ifolder.ru/2463428

Fire3d 26.06.2007 20:03

Возвращаюсь к опросам....
Цитата:

uses crt;

procedure variant(c,x,y:integer;s:string);
begin
textcolor(c); gotoxy(x,y); write(s);
end;

procedure vopros(c,x,y:integer;s:string);
begin
textcolor(c); gotoxy(x,y); write(s);
end;

var otvet,ball,summa:integer;
i:byte;
begin
clrscr;
ball:=0;
vopros(2,30,1,'B kakom weke no9BuJIc9 komp. ?');
variant(14,2,1,'1)‚ 21 weke.');
variant(14,2,2,'2)ў 19 weke. ');
variant(14,2,3,'>'); read(otvet);

clrscr;

vopros(2,30,1,'Antichat-samu ly4shi ?');
variant(14,2,1,'1)Da!');
variant(14,2,2,'2)Hea!');
variant(14,2,3,'>');readln(otvet);

if otvet=1 then ball:=ball+5;
summa:=ball;
if otvet=2 then ball:=ball-5;
writeLn('Vash ball=',summa);
readkey;
end.
Хм...если сделать рандом.... в моем случие при рандоме окажется vopros(2,30,1,'Antichat-samu ly4shi ?'); 1)Нет а 2)Да....
и бал в минус пойдет а ответ будет верный как выйти из ситуции....?

Дикс 30.06.2007 12:11

Имеет место быть следующее задание:

Вариант задания реализовать в виде функции, использующей для работы со строкой только указатели и операции вида *p++, p++ и т.д..

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

------

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

The_HuliGun 30.06.2007 12:43

Ето алгоритм QuickSort, читай здесь

Дикс 30.06.2007 16:32

никак не могу сделать этот квиксорт =\


вот чего я делаю:
1. задаю каким-то хреном середину массива (этот выбор наугад совсем мне не нравится, херня какая-то)
2. затем ищу слева число, больше или равное данному.
если не нашёл, то оно получается такое же как и в середине.
3. ищу слева меньшее данного. или опять же ему равное?
вот уже из-за этой херни я не вижу там логики.
сколько описаний в сети не прочёл - нигде не сказано точно.
примеров нормальных вообще нет.

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

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

помогите, набросайте хоть какой-нить пример нормальный

ZaCo 30.06.2007 16:54

да уж, куда этому идиоту хоару до нас...

Дикс 30.06.2007 17:15

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

ZaCo 30.06.2007 17:24

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

Дикс 30.06.2007 18:24

вот можно ли это дело изменить так чтобы функция работала только на указателях?


void quicksort(int *array, int start, int stop)
{
int left = start,
right = stop,
center = array[(start + stop) / 2];

while(left<right)
{
while(array[left]<center) left++;
while(array[right]>center) right--;
if(left<=right)
{
swap(&array[left], &array[right]);
left++;
right--;
}
}
if(right>start) quicksort(array, start, right);
if(left<stop) quicksort(array, left, stop);
}

ZaCo 30.06.2007 18:37

array[i] -> *(array+i)
&array[i] -> array+i

Дикс 01.07.2007 09:38

задача: Функция находит в строке заданную подстроку и
возвращает динамический массив указателей на все вхождения этой подстроки.

так вот я не знаю, какой размер задать массиву? получается всякая чушь:

Код:

#include "stdio.h"
void strf(char s1[], char s2[], int pos=0)
{
        int n = sizeof(s1)/sizeof(s1[0]);
        int n2 = sizeof(s2)/sizeof(s2[0]);
        char *mass[20];
        for(int i=0; i<=n; i++)
        {
        if(s1[i] == s2[i])
        {
        int g=i;
        for(int l=i; l<=n2; l++)
                if(s1[l]!=s2[l])
                {
                int g=-1; break;
                }
        mass[i] = &s1[g];
        }
        }

}


void main()
{
        char s1[] = "Terriuckble Fucker Stuckpidly";
        char s2[] = "uck";
                strf(s1,s2);
}


Дикс 01.07.2007 11:03

вот переделал сколько смог, но всё равно не работает собака серая!
я с массивом ms уже замучался. надо чтобы он был массивом указателей char *ms
и в него сохранялись указатели на первые вхождения подстроки в строку, т.е.
адреса на три буквы U, за которыми следуют буквы C и K.
В учебнике написано что для массивов указателей вообще не выделяется память, и как тогда быть?
Как наполнить массив указателями?
Постучитесь кто-нить в аську 268238560, объясните, иначе я на экзамен не попаду, очень нужен дельный совет!
По сути, могу даже яндекс деньгами рассчитаться за помощь, в разумных пределах конечно.

#include "stdio.h"


char * strf(char *s1, char *s2)
{
for (int m1=0;s1[m1]!='\0';m1++);
for (int m2=0;s2[m2]!='\0';m2++);

int ms[5];
int counter=0;
int ps=0;
for(int i=0;i<m1;i++)
{

if(s1[i] == s2[0])
{
int start = i;
for(int j=0;j<m2;j++)
{
if(s1[j+i] != s2[j])
ps = 1;
}

if(ps == 0)
ms[counter] = start;

}

}

return (int)ms[5];
}


void main()
{
char s1[] = "Terriuckble Fucker Stuckpidly";
char s2[] = "uck";


strf(&s1[0],&s2[0]);

for(int l=0;l<5;l++)
printf("%d \n", ms[l]);

}

Дикс 01.07.2007 11:07

и ещё: где взять alloc.h? у меня в МС визуал си++ 6.0 его нет

nerezus 01.07.2007 11:12

Юзай new/delete вместо (m/c)alloc/free

Ky3bMu4 01.07.2007 14:44

Или вот: http://www.codenet.ru/progr/visualc/esmall/add.txt

sni4ok 01.07.2007 15:51

Цитата:

Сообщение от nerezus
Юзай new/delete вместо (m/c)alloc/free

плахой совет, ибо exception safe код при явном вызове delete получить трудно, потому правильный совет звучит так-
используйте умные указатели и обёртки над указателями вместо освобождения ресурсов на прямую.

Дикс 02.07.2007 11:17

подскажите вот что:

entries = (char**)realloc(entries, arr_size*sizeof(char*));
такой строкой я заново переопределяю массив указателей entries или к нему как-то добавляется свободное место?
мне нужно в цикле добавлять в динамический массив указатели и каждый раз увеличивать его размер.


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

Код:

#include "stdio.h"  // ввод/вывод
#include "stdlib.h" // работа с памятью


char ** fndr(char *s1, char *s2, int *n_entrs)
{
char ** entries = NULL; // массив с указателями на вхождения
int arr_size = 2; // изначально его размер 0
int counter = 0; // счётчик записей
int destroy = 0; // если все буквы совпали то она равна нулю

for(int s1_len=0;s1[s1_len] != '\0'; s1_len++); // s1_len - длина первой строки
for(int s2_len=0;s2[s2_len] != '\0'; s2_len++); // s2_len - длина второй строки

for (int i=0; i<s1_len; i++)
{
        if(s1[i] == s2[0]) // если совпал первый символ
        {
        for(int g=0; g<s2_len; g++)
        {
        if(s1[i+g] != s2[g])
                destroy = 1;
        }

        if(!destroy)
        {


                if(counter >= arr_size)
        {
            arr_size *= 2;
        entries = (char**)realloc(entries, arr_size*sizeof(char*)); // добавление памяти
        }

        entries[counter] = &s1[i]; // добавление указателя в массив
        counter++; // счотчик инкрементируем
        }

        }


} // конец перебора первой строки

*n_entrs = counter;
return entries;
}




void main()
{
char s1[] = "my house is you house in you house is wife";
char s2[] = "house";

char ** entries; // массив с указателями на вхождения
int n_entrs = 0; // кол-во вхождений

entries = fndr(s1, s2, &n_entrs);


for (int n=0; n<n_entrs; n++)
        printf("%s \n", entries[n]);

free(entries);
}


Z0rd$23 06.07.2007 19:38

Тут некоторые сортировки на С++, реализация. Если кому надо.
http://www3.msiu.ru/~roganov/2sem/sort.cpp

Piflit 15.09.2007 18:07

дайте инфы по оверлеям с нуля плз. юзал поиск, не нашел

ЗЫ не нашел другого раздела, чтобы спросить=\

Ni0x 15.09.2007 20:44

Piflit, я тебе уже писал, тебе нужно ознакомиться с документациями по формату PE, но уровень на котором ты находишься сейчас явно не предполагает ознакомления с этой темой. Лучше разберись с основнами для начала. Про указатели, ссылки почитай и т.п. И еще, не путай, если хочешь учиться покупай книгу именно по С, а не талмуд по С++ , ООП на данный момент тебе явно не нужно.
Цитата:

Оверлей – это то, что находится между физическим концом последней секции и концом файла. Конечно, оверлей может содержать и полезную для файла информацию.
wasm.ru -> статьи и форум, лучше чем там не ответят пожалуй нигде.

Piflit 15.09.2007 20:53

Цитата:

Сообщение от Ni0x
Piflit, я тебе уже писал, тебе нужно ознакомиться с документациями по формату PE, но уровень на котором ты находишься сейчас явно не предполагает ознакмоления с этой темой. Лучше разберись с основнами для начала. Про указатели, ссылки почитай и т.п. И еще, не путай, если хочешь учиться покупай книгу именно по С, а не талмуд по С++ , ООП на данный момент тебе явно не нужно.

Спасибо за ответ. Я знаю, что ты много занешь, просто хочется услышать еще чьи-то мнения.


Время: 01:04