Студентам с лабораторными сюда (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 20 Jun 2007.

Thread Status:
Not open for further replies.
  1. t3xHuK

    t3xHuK New Member

    Joined:
    22 Aug 2007
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    утром был асм... (масм + библиотека study32.inс)
     
    #141 t3xHuK, 20 Dec 2007
    Last edited: 20 Dec 2007
  2. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Поступило предложение воспользоваться отладченгом и посмотреть в риал-тайме где спряталась ошибко!
     
  3. t3xHuK

    t3xHuK New Member

    Joined:
    22 Aug 2007
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    скачал олли дебаг, открыл, но тама совсем все не так)
    на то чтоб без опыта разобраться что оно там накомпилило надо минимум день...

    З.Ы. просто фактически это мой 3 кодинг на асме... отладчиком еще не умею пользоватся...
    пошел искать инфу по олли, но это нада на завтра...

    закачал архив с исходником и плодами компиляции
    брать тут
    компилил след строкой
    ML /nologo -Zi -c -Fl -Sg -coff str_v_br.asm
    линковал этой:
    LINK32 /nologo str_v_br.obj user32.lib kernel32.lib Study32.obj /SUBSYSTEM:CONSOLE /DEBUG /MAP
     
    #143 t3xHuK, 20 Dec 2007
    Last edited: 20 Dec 2007
  4. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    а что ты не понимаешь?
    на ассемблере всё просто -
    заглавные буквы от A до Z имеют аски коды 41h-5Ah, строчные - 61h-7Ah. И все они ничем друг от друга не отличаются, кроме пятого бита(здесь был KEZ). Меняя его, ты сможешь выводить как в верхнем регистре, так и в нижнем.
    например буква а
    A:01000001 и a:01100001
    Используй xor.
    А как на паскале хз =) я его не знаю
     
    #144 tclover, 21 Dec 2007
    Last edited: 21 Dec 2007
  5. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Автор, без отладченга ты сильно заебешься...

    Открываем, попадаем на первую инструкцию
    [​IMG]

    F7 - это шаг внутрь, F8 - поверх.
    отличие - например, если будет call, то F7 шагнет внутрь процедуры, а F8 - перешагнет этот CALL
    F9 - запуск, F2 - брейк-поинт. ENTER - посмотреть что там находится (по джампу, колу или рету, и тп), не переходя.
    Нажимаем F8:

    [​IMG]

    Идем F8 или F7, проходя твой код, скоро попадаем на
    call ReadString
    там все останавливается (из-за ReadConsole()) и надо ввести строку.

    [​IMG]

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

    tclover, бита а не байта.
     
  6. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    ага. интересно, почему я про байты написал.
    ps а я там у тебя в репе вопрос спросил
     
    #146 tclover, 21 Dec 2007
    Last edited: 21 Dec 2007
    1 person likes this.
  7. t3xHuK

    t3xHuK New Member

    Joined:
    22 Aug 2007
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    спс) еще утром все поправил, пошел сдавать)

    ЗЫ юзнул ТДебаг, раньше в паскале програмил (1 курс када был)) нашел все без порблем... теперь изучаю инфу по олли )))
     
  8. ***Dr.Freez***

    ***Dr.Freez*** New Member

    Joined:
    7 Dec 2007
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    2 tclover, ды я знаю как перевести в верхний и в нижний регистра, я хз как теперь все три строки вывести =)
     
  9. Shawn1x

    Shawn1x Elder - Старейшина

    Joined:
    24 Aug 2007
    Messages:
    307
    Likes Received:
    538
    Reputations:
    13
    Задание
    используя алгоритмы и контейнеры Stl:
    создай список из 20 случаных элементов, со значениями от 1 до 19.
    отсортируй список так что бы сначала шли четные элементы
    Заранее спасибо
     
  10. Ded MustD!e

    Ded MustD!e Banned

    Joined:
    23 Aug 2007
    Messages:
    392
    Likes Received:
    694
    Reputations:
    405
    Пожалуйста помогите написать хотя бы одну программу на языке Pascal, завтра по этим программам сдавать зачет. Мне сейчас нужно срочно уезжать и у меня физически нет возможности(((( Заранее спасибо тем, кто поможет написать хоть какую-то часть кода!!

    1. Пакет операций над матрицами

    Требуется написать пакет функций для работы с матрицами размерности 4х4 :

    Транспонирование: матрица B получается перестановкой строк и столбцов в исходной матрице A, т.е. для квадратной матрицы bij = aji.

    Умножение: произведением матрицы A размерности nхm на матрицу B размерности mхp называется матрица C, каждый элемент cij которой равен сумме
    произведений элементов i–й строки матрицы A на соответствующие элементы j–го столбца матрицы B, т.е. cij = ai1b1j + … + aimbmj.

    Логические блоки(что нужно сделать):

    Генерация 2 исходных матриц (ручная и random).
    Транспонирование обеих матриц.
    Умножение 2 матриц.
    Вывод (любой) матрицы размерности 4х4.

    Как и что будет оцениваться преподом:

    Содержательная часть:

    +5 – операция транспонирование;
    +10 – операция умножение.

    Интерфейсная часть:

    +5 – понятный интерфейс со строками приглашения и пояснениями результатов;
    +5 – наличие меню и циклического алгоритма работы программы.

    Пояснительная часть:

    +2,5 – встроенная система помощи (вывод справочной информации по операциям по специальной команде);
    +2,5 – отчёт о проведённом тестировании подробное описание входных и соответствующих им выходных данных, ограничений программы по диапазонам и проч.).

    2. Журнал

    Требуется создать "Журнал исследователя" для изучения уровня доходов для некоторой группы населения (не более 100 человек).

    Логические блоки (базовый пакет):

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

    Поиск диапазона введённых значений (для произвольного набора целочисленных
    данных).

    Поиск среднего значения (для произвольного набора целочисленных данных).

    Вывод аналитических данных (диапазона значений и среднего для всех данных о возрасте и всех данных об уровне доходов).

    Логические блоки (дополнительный пакет):
    Вывод аналитических данных (диапазон и среднее) для заданной пользователем возрастной группы (вход: диапазон возраста группы).

    Построение соотношения "возраст-доход" для каждого человека и вывод аналитических данных: возрастание / убывание дохода с возрастом.
    Анализ и вывод данных по каждому городу: диапазон и среднее, отклонение среднего для города от среднего для всех данных. Возможность добавления новых статистических данных и повтора анализа.

    Как и что будет оцениваться преподом:

    Содержательная часть:

    +5 – базовый пакет операций;
    +25 – дополнительный пакет операций.

    Интерфейсная часть:

    +5 – понятный интерфейс со строками приглашения, циклическим вводом данных до специальной команды пользователя и пояснениями результатов;
    +5 – наличие меню и циклического алгоритма работы программы.

    Пояснительная часть:

    +2,5 – встроенная система помощи (вывод справочной информации о возможностях программы по специальной команде);
    +2,5 – отчёт о проведённом тестировании (подробное описание входных и соответствующих им выходных данных, ограничений программы по диапазонам и проч.).
     
  11. Neovild

    Neovild Elder - Старейшина

    Joined:
    18 Dec 2007
    Messages:
    28
    Likes Received:
    22
    Reputations:
    0
    Ded MustD!e, я тебе по матрицам напишу
     
  12. Neovild

    Neovild Elder - Старейшина

    Joined:
    18 Dec 2007
    Messages:
    28
    Likes Received:
    22
    Reputations:
    0
    Меня запарило такую фигню писать, ИМО это только для 8-9 класса лицея.
    Моя шняга работает с квадратными матрицами. Порядок в матрице задается в константах.
    Меня просто запарило писать такую гадость :mad:
    Code:
    program MATRIX;
    uses crt;
    const
      MAX=4;
    var
      a,b,t1,t2,c1,c2:array [1..MAX,1..MAX] of integer;
      j,i,k:integer;
      key1,key2:char;
    begin
      while true do begin
      clrscr;
      for j:=1 to MAX do
        for i:=1 to MAX do begin
          t1[j,i]:=0; t2[j,i]:=0; c1[j,i]:=0; c2[j,i]:=0;
        end;
      repeat
        clrscr;
        writeln('1-console input'); writeln('2-auto'); writeln('3-exit');
        key1:=readkey;
      until ((key1='1') or (key1='2') or (key1='3'));
    
      if key1='3' then break;
      if key1='1' then begin
        for j:=1 to MAX do begin
          for i:=1 to MAX do begin
            write('a[', j ,',' ,i ,']='); read(a[j,i]);
          end;
          writeln;
        end;
        for j:=1 to MAX do begin
          for i:=1 to MAX do begin
            write('b[', j ,',' ,i ,']='); read(b[j,i]);
          end;
          writeln;
        end;
      end;
    
      if key1='2' then begin
        writeln('Matrix 1');
        for j:=1 to MAX do begin
          for i:=1 to MAX do begin
            a[j,i]:=random(10); write(a[j,i]); write('   ');
          end;
          writeln;
        end;
        writeln('Matrix 2');
        for j:=1 to MAX do begin
          for i:=1 to MAX do begin
            b[j,i]:=random(10); write(b[j,i]); write('   ');
          end;
          writeln;
        end;
      end;
      writeln('                      Matrix created, press key'); key2:=readkey;
    
      writeln('T-Matrix 1');
      for i:=1 to MAX do begin
        j:=1;
        while j<=MAX do begin
          t1[i,j]:=a[j,i]; inc(j);
        end;
      end;
      for j:=1 to MAX do begin
        for i:=1 to MAX do
          write(t1[j,i],'   ');
        writeln;
      end;
    
      writeln('T-Matrix 2');
      for i:=1 to MAX do begin
        j:=1;
        while j<=MAX do begin
          t2[i,j]:=b[j,i]; inc(j);
        end;
      end;
      for j:=1 to MAX do begin
        for i:=1 to MAX do
          write(t2[j,i],'   ');
        writeln;
      end;
    
      writeln('                     T-Matrix created, press key'); key2:=readkey;
    
      writeln('Matrix 1 * Matrix 2');
      for i:=1 to MAX do
        for j:=1 to MAX do
          for k:=1 to MAX do
            c1[i,j]:=c1[i,j]+a[i,k]*b[k,j];
      for j:=1 to MAX do begin
        for i:=1 to MAX do
          write(c1[j,i],'   ');
        writeln;
      end;
      writeln('Matrix 2 * Matrix 1');
      for i:=1 to MAX do
        for j:=1 to MAX do
          for k:=1 to MAX do
            c2[i,j]:=c2[i,j]+b[i,k]*a[k,j];
      for j:=1 to MAX do begin
        for i:=1 to MAX do
          write(c2[j,i],'   ');
        writeln;
      end;
      writeln('              Increase Matrix created, press key to clear screen'); key2:=readkey;
      end;
    end.
     
    2 people like this.
  13. Maxyks

    Maxyks Banned

    Joined:
    8 Sep 2007
    Messages:
    174
    Likes Received:
    288
    Reputations:
    20
    Определить класс "дата" c компонентными данными: число, месяц, год. Перегрузить операциия: >>,<<
    (вывод в формате "чч/мм/гггг"),
    >= (проверка на более позднюю дату или на их равенство), += (прибавить n дней).

    Code:
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    class v_date 
    {
    	int number; 
    	int month;  
    	int year;  
    public:
    	v_date (int , int, int );
    	int put_1();
    	int put_2();
    	int put_3();
    	void get_1(int );
    	void get_2(int );
    	void get_3(int );
    	
    };
    v_date::v_date(int a=0, int b=0, int c=0)  
    	{
    		if (a<31) 
    		    number=a;
    		if (b<13) 
    		    month=b;
    		if (c<2014) 
    		    year=c;
    	}
    
    int v_date::put_1()
    {
    	return number;
    }
    int v_date::put_2()
    {
    	return month;
    }
    int v_date::put_3()
    {
    	return year;
    }
    void v_date::get_1(int a)
    {
    	if (a<31)
    	    number=a;
    	else 
    		number=0;
    }
    void v_date::get_2(int b)
    {
    	if (b<13)
    		month=b;
    	else
    		month=0;
    }
    void v_date::get_3(int c)
    {
    	if (c<2014)
    		year=c;
    	else
    		year=0;
    }
    
    	ostream& operator << (ostream& out, v_date p)
    	{
    		out<<setw(2)<<p.put_1()<<"/"<<setw(2)<<p.put_2()<<"/"<<setw(4)<<p.put_3()<<endl;
    		return out;
    	}
    	istream& operator >> (istream& in, v_date& p)
    	{
    		int a;
    		cout<<"\nEnter number ";
    		in>>a;
    		p.get_1(a);
    		cout<<"\nEnter month ";
    		in>>a;
    		p.get_2(a);
    		cout<<"\nEnter year ";
    		in>>a;
    		p.get_3(a);
    		return in;
    	}
    	int operator >= (v_date p, v_date pp)
    	{   int kz;
    		int np=365*p.put_3()+30*p.put_2()+p.put_1();
    		int npp=365*pp.put_3()+30*pp.put_2()+pp.put_1();
    	return  kz=np<npp ? 0: 1; //вычисляем большую дату
    		
    	}
    		
    	void main()
    	{
    		v_date d1, d2;
    		cout<<"\nEnter d1\n";
    		cin>>d1;
    		cout<<"\nd1="<<d1;
    		cout<<"\nEnter d2\n";
    		cin>>d2;
    		cout<<"\nd2="<<d2;
    		if (d1>=d2)
    			cout<<"\nbig number "<<d1;
    		else 
    			cout<<"\nbig number "<<d2;
    		
    	}
    вот программка не хватает оператора +=, не могу понять как сделать... что-то вроде
    Code:
     v_date operator += (v_date p, v_date pp)
    
    { int zz; zz=p.put_1()+pp.put_1(); return zz;}
    может кто поможет /

    //решил
     
    #153 Maxyks, 23 Dec 2007
    Last edited: 24 Dec 2007
  14. Furious

    Furious New Member

    Joined:
    30 Sep 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Уважаемые Форумчане, помогите пожалуйста с выполнением лабораторной работы на языке С. Дело в том, что лабораторную работу нужно сдать уже в четверг, до него осталось 2 дня, а помимо программирования нужно до четверга сдать ещё 3 зачёта, которые придётся учить, следовательно некого просить о помощи...
    Задание лабораторной такое:
    Дан файл (333.dat) в котором находятся две квадратные матрицы. Файл выглядит примерно таким образом:
    Code:
    5 4
    х х х х х
    х х х х х
    х х х х х
    х х х х х
    х х х х х
    у у у у
    у у у у
    у у у у
    у у у у
    где 5 - определитель размерности первой матрицы, 4 - определитель размерности второй матрицы, х - любое число в первой матрице, у - любое число во второй матрице.
    Итак нам нужно:
    1) проверить наличие файла
    2) считать оба массива из файла, предварительно заказав для них память
    Code:
    a = (int **)malloc(n*sizeof(int *));
    n - наше первое число 5
    for(i=0; i<n; i++)
    a[i] = (int *)malloc(n*sizeof(int));
    ну в подобном духе...
    3) Из первых двух матриц составить третью матрицу, в которой левый верхний угол состоит из элементов той матрицы, след которой больше, а правый нижний - из элементов второй матрицы. Остальные элементы матрицы равны 0.
    4) Вывести результат на экран.

    Очень надеюсь, что Вы мне поможете. Напомню, что язык, на котором нужно составить программу - "С". (желательно под Visual Studio 2005).
     
    #154 Furious, 25 Dec 2007
    Last edited: 25 Dec 2007
  15. Shawn1x

    Shawn1x Elder - Старейшина

    Joined:
    24 Aug 2007
    Messages:
    307
    Likes Received:
    538
    Reputations:
    13
    Задание
    используя алгоритмы и контейнеры Stl:
    создай список из 20 случаных элементов, со значениями от 1 до 19.
    отсортируй список так что бы сначала шли четные элементы
    Заранее спасибо
     
  16. Release

    Release New Member

    Joined:
    8 Nov 2007
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    На основе элементов вещественного массива А(n) и значения логической переменной Т вычислить количество положительных элементов массива А, если переменная Т имеет значение «истина» и произведение отрицательных элементов массива А в противном случае.

    Реализация Паскаль.

    Пожалуйстааааа!!!!
    Email: [email protected] или здесь...плиз
     
  17. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Release, навскидку
    Code:
    const
      n = 5;
    
    var
      a : array [1..n] of real;
      p : real;
      i : integer;
      t : boolean;
    
    begin
      t := false;
      writeln ('ввод данных в массив');
      for i := 1 to n do begin
        write ('Введите ', i, '-й элемент массива: ');
        readln (a [i]);
      end;
      p := 1;
      if t then
        for i := 1 to n do
          if a [i] > 0 then
            p := p * a [i];
      if not t then
        for i := 1 to n do
          if a [i] < 0 then
            p := p * a [i];
      writeln ('Произведение: ', p : 0 : 3);
    end.
    
     
  18. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    То есть тут:
    Code:
      if t then
        for i := 1 to n do
          if a [i] > 0 then
            p := p * a [i];
    надо делать типо:
    Code:
      if t then
        for i := 1 to n do
          if a [i] > 0 then
            inc(count);
    где count целочисленная переменная, инициализированная нулем перед циклом ;)
     
  19. Neovild

    Neovild Elder - Старейшина

    Joined:
    18 Dec 2007
    Messages:
    28
    Likes Received:
    22
    Reputations:
    0
    Release, лови.
    Code:
    program ArrayNoobas;
    uses crt;
    const
      Max=20;
    var
      a:array [1..MAX] of real;
      i,kol:integer;
      pro:real;
      t:boolean;
      procedure zapoln;
      begin
        clrscr;
        for i:=1 to MAX do
        a[i]:=-5+random(10);
      end;
    
      procedure create_t;
      var
        key:char;
      begin
        repeat
          key:=readkey;
        until (key='0')or(key='1') ;
        if key='0' then t:=false
        else t:=true;
      end;
    
    begin
      zapoln;
      create_t;
      if t=true then begin
        for i:=1 to MAX do
          if a[i]>0 then inc(kol);
        writeln(kol);
      end
      else begin
        i:=1;
        while i<=MAX do begin
          inc(i);
          if a[i-1]<0 then begin
    	pro:=a[i-1]; break; end;
        end;
        while i<=MAX do begin
          if a[i]<0 then
    	pro:=pro*a[i];
          inc(i);
        end;
        writeln(pro);
      end;
      readln;
    end.
     
  20. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Млин, сорри, пост невнимательно прочел ((
    Этого недостаточно, ее еще нужно описать в разделе var :)

    Neovild, одно замечание - массив будет заполняться одним числом, ибо отсутствует Randomize в начале процедуры
    А вот этот код для чего?
    Code:
    while i<=MAX do begin
          inc(i);
          if a[i-1]<0 then begin
    	pro:=a[i-1]; break; end;
        end;
    
    Поиск в массиве первого отрицательного числа? Имхо, это лишнее немного, достаточно проинициализировать переменную pro единицей перед циклом вычисления произведения (чуть не написал "производной" :) ). Хотя ваш вариант программы тоже приемлем ;)
     
    #160 krypt3r, 27 Dec 2007
    Last edited: 27 Dec 2007
Thread Status:
Not open for further replies.