ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

20.12.2009, 19:41
|
|
Новичок
Регистрация: 03.12.2008
Сообщений: 13
Провел на форуме: 34545
Репутация:
0
|
|
Ну-у-у... Слова не было, но лабораторная то с темой "С++"
И игрушку "змейку" тоже в с++ нужно.=_)
|
|
|

20.12.2009, 19:55
|
|
Участник форума
Регистрация: 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
|
|
|

21.12.2009, 10:31
|
|
Участник форума
Регистрация: 07.01.2008
Сообщений: 109
Провел на форуме: 214923
Репутация:
17
|
|
Всё понял!
Большое спасибо!
|
|
|

21.12.2009, 03:04
|
|
Участник форума
Регистрация: 07.01.2008
Сообщений: 109
Провел на форуме: 214923
Репутация:
17
|
|
Здравствуйте! Я пытаюсь разобраться с динамическими массивами.
Как я понял существуют два способа
1)
Код:
int *asd=new int[3];
//как я понимаю, здесь я создаю новый массив asd с тремя элементами.
2)
Код:
int *asd=(int*)malloc(sizeof(int)*3);
//как я понимаю, здесь я также создаю массив с тремя элементами.
Если я и в первом и во втором случае допишу:
Код:
asd[n]=111;
//где n любое целое число
всё прекрасно работает!!!
Внимание вопрос: почему???
visual studio C++
|
|
|

21.12.2009, 10:26
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Не факт что будет работать. Просто та память под которую выделил всё будет доступна для массива, а что за её пределами, может вообще не существовать или быть отданной под другие нужны. К примеру для локальный переменных.
И тогда ты просто будешь затирать их.
Вот пример:
Код:
int mas[3];
int z;
z = 0;
mas[3] = 1122334;
printf("%i", z);
зависит от компилятора, но с большой вероятностью выведется не 0, а 1122334
|
|
|

21.12.2009, 10:42
|
|
Новичок
Регистрация: 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..
|
|
|

21.12.2009, 11:10
|
|
Постоянный
Регистрация: 15.07.2008
Сообщений: 444
Провел на форуме: 1417964
Репутация:
665
|
|
Сообщение от a1ertso
Помогите пожалуйста с решением(на Делфи).
1.1)Найти произведение элементов массива A = {1, 3.5, 4, -0.8, 1.9, 5, 13}, удовлетворяющих условию , если С = 2, D = 10.
уточни.
какому условию
|
|
|

21.12.2009, 11:15
|
|
Новичок
Регистрация: 16.12.2009
Сообщений: 29
Провел на форуме: 101927
Репутация:
0
|
|
Сори, просто не заметил. Условия вписал.
|
|
|

21.12.2009, 12:12
|
|
Познавший АНТИЧАТ
Регистрация: 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..
|
|
|
Поиск самого длинного и самого короткого слова |

22.12.2009, 00:02
|
|
Новичок
Регистрация: 27.03.2009
Сообщений: 12
Провел на форуме: 17616
Репутация:
0
|
|
Поиск самого длинного и самого короткого слова
Здравствуйте, помогите мне пожалуйста.
Необходимо на С реализовать следующую программу: из введенной пользователем строки выбрать самое длинное и самое короткое слово.
У меня есть свои попытки решения данной задачи, вот один из примеров:
Код:
#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;
}
Но после нескольких неудачных попыток я понял, я что со стороками у меня все глухо.Заведомо благодарю всех откликнувшихся
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|