HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 20.12.2009, 19:41
Nelson17
Новичок
Регистрация: 03.12.2008
Сообщений: 13
Провел на форуме:
34545

Репутация: 0
По умолчанию

Ну-у-у... Слова не было, но лабораторная то с темой "С++"
И игрушку "змейку" тоже в с++ нужно.=_)
 
Ответить с цитированием

  #2  
Старый 20.12.2009, 19:55
brainy
Участник форума
Регистрация: 21.08.2009
Сообщений: 131
Провел на форуме:
2058728

Репутация: 60
По умолчанию

Если кто может помочь разобраться с программой на ассемблере, буду премного благодарен. Язык к сожалению знаю хуже некуда. В общем программа обрабатывает заданный в командной строке файл таким образом, что все прописные латинские буквы преобразуются в заглавные. Ниже собствено код, кто может плиз откомментируйте построчно ну или насколько хватит терпения. Заранее благодарен.
Код:
CODE SEGMENT
ASSUME CS:CODE, DS:CODE
ORG 100H
BEGIN:
JMP BEG
TEXT1 DB 'Нет параметров.',13,10,'$'
TEXT2 DB 'Файл не найден.',13,10,'$'
PATH DB 80 DUP(O) ;путь к файлу
BUF DB 160 DUP(?) /буфер для чтения файла
BEG:
;блок анализа командной строки
XOR SI,SI
XOR DI,DI
MOV DL,1
LOO:
CMP BYTE PTR [81H+SI],ODH
JZ NO_PAR
MOV AL,[81H+SI]
CMP AL,' '
JZ SPACE
XOR DL,DL
MOV [PATH+DI],AL
INC DI
JMP SHORT L001
SPACE:
OR DL,DL ;если DL=0 тогда первый параметр закончился
JZ NO_PAR
L001:
INC SI
JMP SHORT LOO
NO_PAR:
OR SI,SI ;был ли параметр
JNZ CONT
/сообщение, затем выходим
MOV DX,OFFSET TEXT1
MOV AH,9
INT 21H
JMP EXIT
/теперь открытие и преобразование файла
CONT:
/открыть файл
LEA DX,PATH
MOV AX,3D02H
INT 21H
JNC NORM
MOV DX,OFFSET TEXT2
MOV AH,9
INT 21H
JMP EXIT
NORM :
MOV BX,AX
XOR DI,DI ;в DI будет хранится начало считываемого участка
POVT:
;читать участок файла в буфер
LEA DX,BUF
MOV АН,3FH
MOV CX,160 /размер буфера
INT 21H
MOV AH,AL
LEA SI,BUF
CMP AL,0
;просматриваем буфер и преобразуем латинский шрифт
L02 :
JZ ZER
CMP BYTE PTR [SI],97
JB L01
CMP BYTE PTR [SI],122
JA L01
SUB BYTE PTR [SI],32
L01:
INC SI
DEC AL
JMP SHORT L02
ZER:
PUSH AX
;перемещаем указатель файла назад
MOV AX,4200H
XOR CX,CX
MOV DX,DI /указатель начала считанного участка
INT 21H
; пишем буфер на диск
;количество записанных байт может, вообще говоря,
;быть больше 160
MOV АН,40Н
POP СХ
PUSH СХ
MOV CL,CH
XOR CH,CH
LEA DX,BUF
INT 21H ' .
;проверяем, не достигнут ли конец файла
POP AX
MOV AL,AH
XOR АН,АН
ADD DI,АХ
CMP AL,160 ;сравниваем с размером буфера
JZ POVT
;закрыть файл
MOV АН,ЗЕН
INT 21H
EXIT:
RET
CODE ENDS
END BEGIN
 
Ответить с цитированием

  #3  
Старый 21.12.2009, 10:31
SSB1981
Участник форума
Регистрация: 07.01.2008
Сообщений: 109
Провел на форуме:
214923

Репутация: 17
Отправить сообщение для SSB1981 с помощью ICQ
Lightbulb

Всё понял!
Большое спасибо!
 
Ответить с цитированием

  #4  
Старый 21.12.2009, 03:04
SSB1981
Участник форума
Регистрация: 07.01.2008
Сообщений: 109
Провел на форуме:
214923

Репутация: 17
Отправить сообщение для SSB1981 с помощью ICQ
Question

Здравствуйте!
Я пытаюсь разобраться с динамическими массивами.
Как я понял существуют два способа
1)
Код:
int *asd=new int[3];

//как я понимаю, здесь я создаю новый массив asd с тремя элементами.
2)

Код:
int *asd=(int*)malloc(sizeof(int)*3);

//как я понимаю, здесь я также создаю массив с тремя элементами.
Если я и в первом и во втором случае допишу:

Код:
asd[n]=111;
//где n любое целое число
всё прекрасно работает!!!
Внимание вопрос: почему???

visual studio C++
 
Ответить с цитированием

  #5  
Старый 21.12.2009, 10:26
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Не факт что будет работать. Просто та память под которую выделил всё будет доступна для массива, а что за её пределами, может вообще не существовать или быть отданной под другие нужны. К примеру для локальный переменных.
И тогда ты просто будешь затирать их.
Вот пример:
Код:
int mas[3];
int z;

z = 0;
mas[3] = 1122334;
printf("%i", z);
зависит от компилятора, но с большой вероятностью выведется не 0, а 1122334
 
Ответить с цитированием

  #6  
Старый 21.12.2009, 10:42
a1ertso
Новичок
Регистрация: 16.12.2009
Сообщений: 29
Провел на форуме:
101927

Репутация: 0
По умолчанию

Помогите пожалуйста с решением(на Делфи).

1.1)Найти произведение элементов массива A = {1, 3.5, 4, -0.8, 1.9, 5, 13}, удовлетворяющих условию , если С = 2, D = 10. Сформировать из этих элементов массив Z.

1.2) В массиве Р(m,n) все элементы разделить на максимальный элемент k-го столбца:

Последний раз редактировалось a1ertso; 21.12.2009 в 11:14..
 
Ответить с цитированием

  #7  
Старый 21.12.2009, 11:10
lisa99
Постоянный
Регистрация: 15.07.2008
Сообщений: 444
Провел на форуме:
1417964

Репутация: 665
По умолчанию

Цитата:
Сообщение от a1ertso  
Помогите пожалуйста с решением(на Делфи).

1.1)Найти произведение элементов массива A = {1, 3.5, 4, -0.8, 1.9, 5, 13}, удовлетворяющих условию , если С = 2, D = 10.
уточни.
какому условию
 
Ответить с цитированием

  #8  
Старый 21.12.2009, 11:15
a1ertso
Новичок
Регистрация: 16.12.2009
Сообщений: 29
Провел на форуме:
101927

Репутация: 0
По умолчанию

Сори, просто не заметил. Условия вписал.
 
Ответить с цитированием

  #9  
Старый 21.12.2009, 12:12
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме:
3660186

Репутация: 905


По умолчанию

1.1)
Код:
program laba35;

const
  a : array [0..6] of real = (1, 3.5, 4, -0.8, 1.9, 5, 13);
  c = 2;
  d = 10;

var
  i : integer;
  p : real;

begin
  p := 1;
  for i := 0 to 6 do 
    if ((a[i] >= c) and (a[i] < d)) then
      p := p * a[i];
  writeln ('p = ', p : 0 : 2);
end.
1.2)
Код:
program laba36;

type
  SomeArray = array [0..1, 0..2] of real;

const
  p : SomeArray  = ((-1.5, 9.1, 3.5), (2.7, 3.14, 1.5));
  k = 0;

function getmax (p : SomeArray; k : integer) : real;
var
  i : integer;
  max : real;
begin
  max := p[0][k];
  for i := 1 to 1 do
    if max < p[i][k] then
      max := p[i][k];
  getmax := max;
end;

var
  i, j : integer;
  max : real;
  
begin
  max := getmax (p, k);
  for i := 0 to 1 do
    for j := 0 to 2 do
      p[i][j] := p[i][j] / max;
  for i := 0 to 1 do
    for j := 0 to 2 do
      writeln (p[i][j] : 0 : 2);
end.

Последний раз редактировалось krypt3r; 21.12.2009 в 12:30..
 
Ответить с цитированием

Поиск самого длинного и самого короткого слова
  #10  
Старый 22.12.2009, 00:02
Semus
Новичок
Регистрация: 27.03.2009
Сообщений: 12
Провел на форуме:
17616

Репутация: 0
Post Поиск самого длинного и самого короткого слова

Здравствуйте, помогите мне пожалуйста.
Необходимо на С реализовать следующую программу: из введенной пользователем строки выбрать самое длинное и самое короткое слово.

У меня есть свои попытки решения данной задачи, вот один из примеров:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char  stroka[300];
    gets (stroka);

    int dlin_min=strlen(stroka); // хранит длинну минимальной строки, пока равна длинне всей строки
    int dlin_max=0; //хранит максимальную длинну строки
    int dlin_tek=0; //хранит текущую длинну строки

    char stroka_min[300]; //строка хранящая минимальное слово
    char stroka_max[300];// строка хранящая максимальное слово
    char stroka_tek[300]; // строка хранящая текущее слово

    for (int i=0; i<strlen(stroka); i++)
    {
 printf ("i= %d\n", i);
        switch (int(stroka [i]))
        {
            case 32  :{
                              if  (dlin_tek>dlin_max) {
                                                                        for (int j=0; j<dlin_tek; j++)
                                                                        {
                                                                        printf ("j= %d\n", j);
                                                                        stroka_max[j]=stroka_tek[j];
                                                                        };
                                                                        dlin_max=dlin_tek;
                                                                        };
                              if (dlin_tek<dlin_min) {
                                                                        for (int j=0; j<dlin_tek; j++)
                                                                        {
                                                                        printf ("j2= %d\n", j);
                                                                        stroka_min[j]=stroka_tek[j];
                                                                        };
                                                                        dlin_min= dlin_tek;
                                                                        };
                              dlin_tek=0;
                              break;
                              }

            default:
            {
                stroka_tek[i]=stroka[i];
                dlin_tek=strlen(stroka_tek);
            };
        };
    };

printf ("minslovo= %s\n", stroka_min);
printf ("maxslovo= %s\n", stroka_max);
    return EXIT_SUCCESS;
}
Но после нескольких неудачных попыток я понял, я что со стороками у меня все глухо.Заведомо благодарю всех откликнувшихся
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Американским студентам запретили пользоваться Skype KPOT_f!nd Мировые новости. Обсуждения. 1 28.09.2006 03:47
Любителям квестов сюда!! FoX's Болталка 10 25.01.2005 20:42



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ