Вопросы по программированию

Автор Богдан, 03 Листопад 2007, 11:41:18

Попередня тема - Наступна тема

Garfi

Andrii, "кукі" - coockies, информация, кот. сайт передает для хранения браузеру, чтобы в следующий раз, когда на сайт заходишь, экономился трафик, и т.д.

Для этого никакой код не нужен, просто настрой свой браузер... (Менеджер паролей в Firefox, Жезл в Opera)

Andrii

Цитата: Garfi від 21 Лютий 2009, 17:27:57
Andrii, "кукі" - coockies, информация, кот. сайт передает для хранения браузеру, чтобы в следующий раз, когда на сайт заходишь, экономился трафик, и т.д.

Для этого никакой код не нужен, просто настрой свой браузер... (Менеджер паролей в Firefox, Жезл в Opera)
Я ж задав питання по програмуванні, тобто мені треба РНР код, щоб він запамятовував пароль і логін!!!!!

Garfi

Цитата: Andrii від 21 Лютий 2009, 17:31:12
Я ж задав питання по програмуванні, тобто мені треба РНР код, щоб він запамятовував пароль і логін!!!!!
С этого и надо было начинать...Еще было бы неплохо написать какие именно логины и пароли скрипт должен запоминать... У тебя есть сайт, и ты к нему хочешь БД прикрутить... или тебе кейлоггер надо... ???

P.S. Ты похож на моего препода по ОП (Основам программирования)... То, что нужно сделать, щипцами приходится вытягивать... ;D

Andrii

Цитата: Garfi від 21 Лютий 2009, 17:42:36
С этого и надо было начинать...Еще было бы неплохо написать какие именно логины и пароли скрипт должен запоминать... У тебя есть сайт, и ты к нему хочешь БД прикрутить... или тебе кейлоггер надо... ???

P.S. Ты похож на моего препода по ОП (Основам программирования)... То, что нужно сделать, щипцами приходится вытягивать... ;D
Да кажись я ясно висловився. Ладно, поїхали: да я пишу сайт з використанням БД. Пишу зараз реєстрацію, а паралельно до цього написав авторизацію. Так ось, мені треба, щоб після входу всі паролі зберігалися в кукі, тобто як на всіх сайтах - раз ввів і  все.

Garfi

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

Глянь здесь...

Andrii

#605
Цитата: Garfi від 21 Лютий 2009, 18:27:02
Andrii, когда кажется, креститься надо... если бы ясно выразился, мне бы не нужно было наводящие вопросы задавать...

Глянь здесь...
Я не дуже дивився, але кажись*тричі перехрестився* одні скрипти. (якшо не прав - вибачаюся). Як кажуть: треба все самому робити. Якшо комусь цікаво - ось є про ту функцію, яку я шукав. Треба сісти і розібрати її, про результат може і напишу. Якщо не вийде - спитаю Вас!

UPD
У мене виникла проблема при використанні кукі:
Після того, як логін і пароль підійшли, підключаю кукі функцією
setcookie("login","$login2");
setcookie("pass","$pass2");
а мені видає помилку:
ЦитатаWarning: Cannot modify header information - headers already sent by (output started at z:\home\localhost\www\anriteam\enter.php:9) in z:\home\localhost\www\anriteam\enter.php on line 87

Warning: Cannot modify header information - headers already sent by (output started at z:\home\localhost\www\anriteam\enter.php:9) in z:\home\localhost\www\anriteam\enter.php on line 88

В чому проблема і що потрібно виправити?
Ось код усієї сторінки:

<?php include ("blocks/bd.php"); 	   if (isset ($_POST['login'])){$login2=$_POST['login']; $login2=trim($login2); if ($login2 ==''){unset ($login2);}}      if (isset ($_POST['pass'])){$pass2=$_POST['pass'];$pass2=trim($pass2); if ($pass2 ==''){unset ($pass2);}}	  ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="keywords" content="
<?php echo $myrow ['meta_k']; ?>
" />
<meta name="description" content="
<?php echo $myrow ['meta_d']; ?>
" />


<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Сторінка входу</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>

<table width="84%" align="center" >
<!--Верхній блок-->
<?php include ("blocks/header.php"); ?>

  <tr>
   <tr>
     <td>

   <table >
     <tr>
       <td valign="top" width="26%" align="left" class="left">
<?php include ("blocks/left.php");?>

       
       <td valign="top"  width="55 %" class="top">
       
<?php 	 	   if (isset($login2) && isset ($pass2))	   {   $r=mysql_query("SELECT * FROM userlist WHERE login= '$login2' AND pass='$pass2'");if(mysql_num_rows($r)==0){echo "<p align='center' class='enter'>Ви ввели неправильний Логін або пароль</p>";print "<p align='center'>Вхід на сайт</p>  					  <form action='enter.php' method='post'>   <p><span class='стиль4'>Логін:</span></p>  <p> <input name='login' type='text'></p>     <p><span class='стиль4'>Пароль:</span></p>     </h3>    <p><input name='pass' type='password'> </p>              <p><input name='submit' type='submit' value='Вхід'> </p>    </form>   <p> <a href='register.php'>  Реєстрація</a>  </p>    <p> <a href='remember.php'>  Нагадати пароль</a>  </p>  ";   print "</td>";        include ('blocks/right.php');      print "</tr>";            include('blocks/down.php');     print "</table>   <tr>        </body></html>";      exit ();}else{echo "Добрый день $login2"; print "</td>";        include ('blocks/righttd.php');      print "</tr>";            include('blocks/down.php');     print "</table>   <tr>        </body></html>";setcookie("login","$login2");setcookie("pass","$pass2");exit();}	   	   	   	   }	   else {print "Ви не заповнили всі поля!";	   print "</td>";        include ('blocks/right.php');      print "</tr>";            include('blocks/down.php');     print "</table>   <tr>        </body></html>";	   	     exit ();}?>

       
       
       
       
       
       
       </td>
       
<?php include ("blocks/right.php");?>

     </tr>
     <!--нижній блок-->
     
<?php include("blocks/down.php"); ?>

   </table>
   <tr>
        </body>
</html>

ПС: Соррі за "брудний" код і можливі помилки - я ще новачок в цьому ділі :)



Garfi

C++, есть указатель на определенный элемент строки. Как найти позицию этого элемента? :-\

Edd.Dragon

#607
Цитата: Andrii від 21 Лютий 2009, 13:05:38
Підскажіть, будь ласка, код, який запамятовує пароль і логін, введений один раз, щоб потім його повторно не вводити!. Це, здається, кукі робить.

Гугль --> PHP как написать (автологин OR автоматический вход OR автоматическую авторизацию) --> http://alt-f4.ru/avtorizaciya-posetiteley-php-mysql-cookie


Цитата: Garfi від 21 Лютий 2009, 17:42:36
С этого и надо было начинать...
Прочти внимательно название темы. Три раза.
И подумай, кто тут нафлудил и неправ
>:(

Цитата: Garfi від 24 Лютий 2009, 14:36:59
C++, есть указатель на определенный элемент строки. Как найти позицию этого элемента? :-\
Отнять от него указатель на первый элемент строки.

Andrii

Цитата: edd_k від 24 Лютий 2009, 14:45:39
Гугль --> PHP как написать (автологин OR автоматический вход OR автоматическую авторизацию) --> http://alt-f4.ru/avtorizaciya-posetiteley-php-mysql-cookie
Дякую за допомогу. Треба було відписатися, але чогось руки не дійшли. Я вже зробив реєстрацію, авторизацію, нагадування паролю, але стаття не помішає, адже виправлю наявні помилки і дещо допишу! Зараз працюю над дизайном і профілем. Так що будуть ОБОВЯЗКОВО питання :)

Ivan_32

Начал работать с FASM. И сразу возник вопрос возможно ли там двойное обращение по указателю? В MASM там ведь что var что [var] одно и тоже. Для того что б адрес вытащить надо было либо addr либо OFFSET ставить. А тут мне фактически нужно сделать что то вроде такого
mov byte[[var]+eax],bl
Вот только Fasm это не парсит и ругается, приходится писать что то вроде такого:
mov edx,[var]
mov byte[edx+eax],bl

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

βεερ_βooρ

Цитата: Ivan_32 від 27 Лютий 2009, 00:59:31
А тут мне фактически нужно сделать что то вроде такого
mov byte[[var]+eax],bl
Что-то такое это в байт по адресу var+ eax поместить bl?
Так как фразу "двойное обращение по указателю" неосилил. Ты имеешь ввиду коственную адресацию?
Цитата: Ivan_32 від 27 Лютий 2009, 00:59:31
Вот только Fasm это не парсит и ругается, приходится писать что то вроде такого:
mov edx,[var]
mov byte[edx+eax],bl
Может можно как то этого избежать?
Если я правильно потял что требуется:
mov byte[var+eax],bl
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Ivan_32

#611
ЦитатаТы имеешь ввиду коственную адресацию?
Да точно, вот ее и имел ввиду.


section '.data' data readable writeable
var dd 0
section '.code' code readable executable
invoke VirtualAlloc,0,512,MEM_COMMIT or MEM_RESERVE,PAGE_READWRITE
;eax=2C00000 для примера.
mov [var],eax
mov eax,2
mov byte[var+eax],bl

Мне почему то кажется что считывается второй байт var-а. В MASM 100% бы записался 1 байт из bl в память по адресу 2C0002 а тут вот уверенности нет и протестировать тоже пока нечем.

UPDATE: задам еще один такой вопрос: я смотрел машинный код инструкции push с несколькими разными переменные. Вобщем что насторожило. Если аргумент меньше 128 - то он интерпертируется как байт тоесть получается: push 7Fh  ==  6A7F а вот push 80h == 6880000000. 2 вопроса: Если оппкод 6A это только для батовых значений, то почему не прокатывает с 80h.  И почему вместо push word используется сразу push dword? Это недоработка компилятора или специально?
Чем больше я узнаю, тем больше чувствую себя дураком...

Ivan_32

Почему то в FASM-е не получается вызвать свою функцию invoke-ом.
Тоесть есть допустим функция:

proc _Hex2Text buff0,buff1,bLen
      ret
endp


если в коде написать что то вроде
invoke _Hex2Text,0,0,0
пишет:
ЦитатаMemoryView.asm [40]:
   invoke _Hex2Text,3
C:\INCLUDE\macro/proc32.inc [20] invoke [6]:
    call [proc] }
error: operand size not specified.
А вот если написать:
stdcall _Hex2Text,0,0,0
То все прекрасно работает. Что это вобще такое stdcall ? И чем он отличается от invoke.
Чем больше я узнаю, тем больше чувствую себя дураком...

Balldir

#613
Проблема .Не работает рандом . Dev-C++

Цитата#include <cstdlib>
#include <iostream>
//#include <stdio.h>
#include <stdlib.h>
using namespace std;

int main(int argc, char *argv[])
{
     randomize();
    int a,b,i;
    float z[20];
    float sum,dob;
    dob=1;
    for (i=0;i<21;i++) {
        a=1;
        b=1;
        a=rand(50);
         b=rand(50);
        z=a-b;
        if (z<0) { sum=sum+z;
                         dob=dob*z;
                         }
        cout<<z;
        };
        cout<<endl;
        cout<<sum <<endl;
        cout<<dob<<endl;
       
    system("PAUSE");
    return EXIT_SUCCESS;
}
Fortuna comprobat hominies consilium .
Quilibet fortunae suae faber.

Garfi

#614
Balldir, в Dev-C++, как и в др. современных IDE  другой метод случайного ввода чисел...

подключай time.h и stdlib.h

вместо randomize(); пиши srand ( time (NULL));
вместо random(10);  пиши  rand()%10;


upd
вместо system("PAUSE"); рациональней испоьзовать getch(); из conio.h .

Balldir

Цитата: Garfi від 05 Березень 2009, 07:43:03
Balldir, в Dev-C++, как и в др. современных IDE  другой метод случайного ввода чисел...

подключай time.h и stdlib.h

вместо randomize(); пиши srand ( time (NULL));
вместо random(10);  пиши  rand()%10;


upd
вместо system("PAUSE"); рациональней испоьзовать getch(); из conio.h .
сенкс, я уже разобрался.
нада было только вспомнить,что конспект у меня по с(де есть randomize),а пишу на с++(де его нет).  :)
Fortuna comprobat hominies consilium .
Quilibet fortunae suae faber.

re-formator

Буду рад помощи в Visual Basic (2008). Суть такова:
Программа получает HTML код, в котором есть такие строки:
<img src="http://into_w.org:8080/img/navig/gif/pol_1.gif" alt="" align="middle" />  <a href="nm.php?nid=213927">ZX-11</a><br/>
<img src="http://into_w.org:8080/img/navig/gif/pol_0.gif" alt="" align="middle" />  <a href="nm.php?nid=708657">N-200</a><br/>
<img src="http://into_w.org:8080/img/navig/gif/pol_1.gif" alt="" align="middle" />  <a href="nm.php?nid=707726">H-228</a><br/>
<img src="http://into_w.org:8080/img/navig/gif/pol_0.gif" alt="" align="middle" />  <a href="nm.php?nid=695229">TV-2200</a><br/>


Нужно чтобы программа перешла сразу к ним и каждую строку переделала в формат:
<option value="213927">ZX-11</option>
<option value="708657">N-200</option>
<option value="707726">H-228</option>
<option value="695229">TV-2200</option>

Благодарю за помощь.
Intel Core 2 Duo E8400@3.6Ghz, ASUS P5KC, 2048Mb DDR2 800Mhz GEiL (GX22GB6400LX), ASUS GF8800GT TOP 512Mb/256bit, OCZ 500Watt, Aerocool AeroEngine Plus, Thermaltake BigTyphoon

Anton T.

re-formator, а второй код это XML или что?
Попробуй так, так или ищи :)

re-formator

Второй код - это то, что надо получить в конце. Кстати, речь идет не о XML, речь идет о преобразовании строк.
Как заставить программу найти цифры и наименование и вставить их в нужный шаблон? Второй код - это желаемый результат работы программы.
Intel Core 2 Duo E8400@3.6Ghz, ASUS P5KC, 2048Mb DDR2 800Mhz GEiL (GX22GB6400LX), ASUS GF8800GT TOP 512Mb/256bit, OCZ 500Watt, Aerocool AeroEngine Plus, Thermaltake BigTyphoon

Edd.Dragon

#619
Цитата: re-formator від 02 Квітень 2009, 22:00:50
Второй код - это то, что надо получить в конце. Кстати, речь идет не о XML, речь идет о преобразовании строк.
Как заставить программу найти цифры и наименование и вставить их в нужный шаблон? Второй код - это желаемый результат работы программы.
Нет, это именно работа с XML. Т.е. по уму нужно разобрать XML-файл (в данном случае HTML) каким-нибудь готовым парсером и в полученном дереве элементов найти все необходимые элементы и заменить на требуемые.

Так ты обеспечишь прозрачность и надежность алгоритма. Ну и кода писать тебе придется гораздо меньше. Если он будет написан хорошо, то высока вероятность его работоспособности даже при изменении дизайна в html-коде, или работоспособности при минимальных изменениях твоего кода. Ведь парсер не ищет какие-то указанные тобой куски в коде, а разбирает заведомо произвольный xml по косточкам.

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

Второй вариант - найти библиотеку для работы с регулярными выражениями - гибкими и всеобъемлющими масками для поиска и замене по тексту. Но нужно разобраться с регулярными выражениями.

Третий вариант - "сделай сам". Т.е. написать втупую нужный алгоритм поиска по строке (твой файл нужно прочесть в одну большую строку, а не в массив строк), использующий обычную string.find(). Но в таком случае ты врядли в этом алгоритме вставишь все необходимые проверки, т.е. не будешь разбирать теги на параметры и имена параметров, а значит наверняка можно будет написать код, который подойдет под шаблон, но разберется некорректно с точки зрения человека, т.е. тебя.

А выглядеть алгоритм будет так.

int i = 0; - текущая позиция в строке
const string template1 = "<a href=\"nm.php?nid=";

начинаем цикл поисков

i = найти в строке, начиная с i, подстроку template1
если(i != string::npos)
{
    k1 = i - 1;

   пока k1 >= 0 и s[j] != '<' k1--; // ищем начало предыдущего тега

   если k1 < 0, то что-то с файлом не то, гнать таких!

   если начиная с k1 находится НЕ подстрока "<img ", то что-то с файлом не то, гнать таких! // заметь, в данном случае мы не проверяем что дальше, т.е. там может быть любая картинка.

   // если пользователь не был послан выше, значит все ок. в k1 у нас та позиция, с которой нужно выбросить старое
   
   i += template1.length(); // i теперь на первой цыфре
   j = найти начиная с i символ '\"' (т.е. кавычки за числом)

   если(j == string::npos) - гнать в шею!

   param1 = подстрока от i до j, т.е. сам айдишник

   i = найти начиная с j символ '>'
   если(i == string::npos) - гнать в шею!
   i++;

   j = найти начиная с i подстроку "</"
   если(j == string::npos) - гнать в шею!

   param2 = подстрока от i до j, т.е. наименование.

   k2 = найти начиная с j символ '>' // это будет конец выкусывания (br не тронут, но если надо, захватывай и его, если он гарантированно есть)

   newStr = "<option value=\"" + param1 + "\">" + param2 + "</option>";

   осталось заменить кусок от k1 до k2 включительно на newStr. Либо такой метод есть в string (не помню какие вариации есть там для замены), либо же (если исходная строка у нас называется buff) так:
    buff = buff.подстрока(от начала до k1) + newStr + buff.подстрока(от k2 + 1 до конца);
}
else
{
   искать больше нечего, выходим из цикла
}
это мы заменили одно вхождение.
следующее необходимо искать начиная с k2 +1
i = k2 + 1;

теперь повторяем виток снова


sanek-rt

Кто-нибудь сможет помочь составить программу в  Turbo Pascal.
Даны два массива A и B одинакового размера N. 
Нужно сформировать новый массив C того же размера , каждый элемент которого равен максимальному из элементов массивов A и B с тем же индексом.
Полученный массив отсортировать в порядке возрастания.
Для отладки программы исходный массив сформировать с помощью генератора случайных чисел.

Phantom of the Opera

Цитата: sanek-rt від 12 Квітень 2009, 11:03:50Кто-нибудь сможет помочь составить программу в  Turbo Pascal.
Задавай конкретніші питання по задачі, пропонуй варіанти коду. Як зможем, так поможем, але програму прийдеться писати тобі. Показуй, що вже написав і де саме проблеми.
"Мыслящий ум - тот, который постоянно учится, никогда не делая заключений; стили и шаблоны уже приведены к заключениям, и, таким образом, они не могут способствовать мышлению." Брюс Лі

βεερ_βooρ

Цитата: Phantom of the Opera від 12 Квітень 2009, 15:12:34
Задавай конкретніші питання по задачі, пропонуй варіанти коду. Як зможем, так поможем, але програму прийдеться писати тобі. Показуй, що вже написав і де саме проблеми.
Поскольку "помогите написать" и "напишите" - это разные вещи :-X
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Sleven

Помогите написать программу на  visual basic.Задача из курсовой и звучит:
«Матриця 1»
Введення й виведення виконати на формі через текстові поля
Умова:
Знайти суму тих елементів матриці А, індекси яких задовольняють умові i < j

Проблема в том, что не знаю как заставить его сравнивать i < j.
Private Sub Command1_Click()
Dim a(1 To 4, 1 To 5) As Double
Dim p As Double
For i = 1 To 4
Label1(i - 1) = "ряд" & i
For j = 1 To 5
a(i, j) = Text1(k)
k = k + 1
Next j, i
s = o: n = 0
For i = 1 To 4
For j = 1 To 5
If a(i, j) < 0 Then s = s + a(i, j): n = n + 1
Next j, i
Text2 = s
Label2 = "Сумма отрицательных елементов ряда "
End Sub

Phantom of the Opera

#624
Цитата: Sleven від 03 Травень 2009, 13:35:07
Помогите написать программу на  visual basic.
Яка версія VB? Бейсик я вже стер, тому пишу всліпу. Попробуй щось подібне:

Dim a(1 To 4, 1 To 5) As Double
Dim i As Integer
Dim j as Integer
Dim summa as Double

summa=0


считування інформації в масив


For j = 2 To 5
For i = 1 To j-1
  summa=summa+a(i,j)
Next i
Next j


вивід результату із значення summa

Працює? ???
PS: Тільки не пиши Next i, j ;)
PPS: Масив має сталий розмір 4х5? Якщо ні, то треба додати перевірку всередині циклу чи не завелике число i
PPPS: Можна було написати і так:

For i = 1 To 4
For j = 1 To 5
  if i<j then summa=summa+a(i,j)
Next j
Next i

Другий метод простіший, але виконує зайву роботу.
"Мыслящий ум - тот, который постоянно учится, никогда не делая заключений; стили и шаблоны уже приведены к заключениям, и, таким образом, они не могут способствовать мышлению." Брюс Лі

Sleven

У меня VB6.0 Матрицу я задаю с меню. Код полностю выглядит как-Private Sub Command1_Click()
Dim a(1 To 4, 1 To 5) As Double
Dim i As Integer
Dim j As Integer
Dim summa As Double
summa = 0
For i = 1 To 4
Label1(i - 1) = "ряд" & i
For j = 1 To 5
a(i, j) = Text1(k)
k = k + 1
n = 0
For j = 2 To 5
For i = 1 To j - 1
  summa = summa + a(i, j)
Next i
Next j
Text2 = summa
Label2 = "Сумма елементов i<j"
End Sub

sanek-rt

sanek-rt, составил программу, но ни как не могу исправить свои ошибки, Turbo Pascal показывает что программа написана не до конца.
Program Sozd_C;
Const n=15;
Var
A:array[1..n] of integer;
B:array[1..n] of integer;
C:array[1..n] of integer;
i, j, d:integer;
begin
randomize;
for i:=1 to n do
A:=random(22);
write(A:5);
B:=random(22);
write(B:5);
writeln;
begin
if A>Bthen C:=A else C:=B;
for i:=1to n do writeln(C);
writeln;
for i:=1 to n-1 do
for j:=1 to n-1 do
if C[j]>C[j+1] then begin
                          d:=C[j];
                          C[j]:=C[j+1];
                          C[j+1]:=d;
                          end;
for i:=1 to n do writeln (C:8,' ');
end.

Sleven

Все :) Пропустил одно выражение - потом нашел.
Код получилсяPrivate Sub Command1_Click()
Dim a(1 To 4, 1 To 5) As Double
Dim i As Integer
Dim j As Integer
Dim s As Double
For i = 1 To 4
Label1(i - 1) = "ряд" & i
For j = 1 To 5
a(i, j) = Text1(k)
k = k + 1
Next j
Next i
s = o: n = 0
For i = 1 To 4
For j = 1 To 5
If i < j Then s = s + a(i, j): n = n + 1
Next j
Next i
Text2 = s
Label2 = "Сумма елементов i < j "
End Sub
Сделал по варианту 2. Но s оставил, а не summa. главное работает. Спасибо

Phantom of the Opera

#628
Цитата: Sleven від 03 Травень 2009, 15:34:03
У меня VB6.0 Матрицу я задаю с меню. Код полностю выглядит как-
Не дуже зрозумів, нащо тобі змінні k і n, як і саму програму в цілому,
але ти робиш помилку, розкриваючи два рази цикл for по одних і тих самих числах. Після For i = 1 To 4 має бути next i, а вже потім знову For i = 1 To j - 1!!! Так само і з j. Тобі треба як результат одне число, чи з кожного рядка своє, а то я заплутався

UPD
Цитата: Sleven від 03 Травень 2009, 15:51:03
Сделал по варианту 2. Но s оставил, а не summa. главное работает. Спасибо
Було приємно допомогти :)
PS: змінна n ныби не використовуэться, можна стерти.
"Мыслящий ум - тот, который постоянно учится, никогда не делая заключений; стили и шаблоны уже приведены к заключениям, и, таким образом, они не могут способствовать мышлению." Брюс Лі

Sleven

#629
нужно целое число. Стер-работает. Спасибо :)

user_lol

Цитата: sanek-rt від 03 Травень 2009, 15:34:49
Turbo Pascal показывает что программа написана не до конца.
...
writeln;
begin
if A>Bthen C:=A else C:=B;
...
а нащо тут begin? Або забери його або добав ше один end в кінці

softdeveloper

2 sanek-rt
А ты уверен, что Паскаль поймет ...if A>B then...

FalseMan


user_lol

Цитата: FalseMan від 17 Травень 2009, 21:05:06
ээ... пробел поставить? ???

ну я думаю компілятор це вже підкаже. а якшо на то пішло то і тут:
Цитатаfor i:=1to n do writeln(C);

Edd.Dragon

Цитата: user_lol від 18 Травень 2009, 17:07:17ну я думаю компілятор це вже підкаже
Совершенно верно, включая строчку, которая ему не понравилась. Так что, не суть важно

Mantikor

Привіт всім!
От цікаво хтось з вас розуміється на Assembler-і?
Зараз конкретних питань нема(вже провчив) але думаю що буде  :-[

user_lol

Цитата: Mantikor від 18 Травень 2009, 18:20:07
Привіт всім!
От цікаво хтось з вас розуміється на Assembler-і?
Зараз конкретних питань нема(вже провчив) але думаю що буде  :-[
сам недавно почав, шось елементарне тіпа - MOV ax,[0220], то можу і я а от посерйозніше  :-\

Mantikor

Цитата: user_lol від 18 Травень 2009, 19:26:43
сам недавно почав, шось елементарне тіпа - MOV ax,[0220], то можу і я а от посерйозніше  :-\
Я по цьому курсову здавав, але так і не зумів довести її до робочого стану  :-[

Andrii

Як мені заставити  скрипт виконувати зчитування до самого кінця. А то доходить до певного моменту і все. Ось проблема: коли переключаєшся по вкладці в меню, вона має підсвітитися. Для цього я ввів змінну - $n=1 (перед виводом тексту); , а потім (в кодові шапки) перевіряю чи існує ця змінна, і якщо true - то змінюється стиль. А так виходить шапка вверху, а змінна внизу; скрипт прийшов до умови, побачив, що перед цим нема ніякої змінної, і пішов (хоча в переді вона буде). Мені потрібно якось це справити. Хтось може помогти?

ostman

чи можна в С++ перевірити зміну на відповідність до одного з типів даних ?

проблема заключається в тому що потрібно перевантажити бінарну операцію для шаблона класу, обєкти якого є елементами динамічного однонаправленого списку, операція повина створювати нові елементи списку, але не можна виділити память якщо невідомі типи елементів класа, а дізнатись тип даних можна тільки перевіривши якого типу параметр передається в функцію.

βεερ_βooρ

Цитата: ostman від 25 Травень 2009, 22:36:40
чи можна в С++ перевірити зміну на відповідність до одного з типів даних ?

проблема заключається в тому що потрібно перевантажити бінарну операцію для шаблона класу, обєкти якого є елементами динамічного однонаправленого списку, операція повина створювати нові елементи списку, але не можна виділити память якщо невідомі типи елементів класа, а дізнатись тип даних можна тільки перевіривши якого типу параметр передається в функцію.
http://en.wikipedia.org/wiki/Run-time_type_information
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

ostman

Цитата: βεερ_βooρ від 25 Травень 2009, 22:43:28
http://en.wikipedia.org/wiki/Run-time_type_information
а можна якось простіше, я ж не МЕГОпрограміст ООП а простий смертний. можна якийсь приклад як це RTTI використовувати, без всяких класів, віртуальних функцій, вказівників ітп., щось простеньке типу "якщо зміна F типу float то щось зробити" ?

βεερ_βooρ

Цитата: ostman від 26 Травень 2009, 00:34:36якщо зміна F типу float то щось зробити
С++ не поддерживает  динамическую типизацию. Выложи тут пример своего класса, что бы было понятнее чего ты хочешь.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

ostman

template<class T>class LIST
{
public:
int num;
T s;
LIST<T> *next;
void operator+(T velue);
};

template<class T> void LIST<T>::operator+(T value)
{};


мені потрібно щоб операція "+" працювала з декількома варіантами типів даних. вона повина створювати нові елементи списка, але для цього вона повина знати що виконати

LIST<int> *temp = new LIST<int>
чи
LIST<float> *temp = new LIST<float>

а дізнатись це можна тільки якщо знаєш тип зміної "value".

βεερ_βooρ

Цитата: ostman від 26 Травень 2009, 00:48:21
template<class T>class LIST
{
public:
int num;
T s;
LIST<T> *next;
void operator+(T velue);
};

template<class T> void LIST<T>::operator+(T value)
{};


мені потрібно щоб операція "+" працювала з декількома варіантами типів даних. вона повина створювати нові елементи списка, але для цього вона повина знати що виконати

LIST<int> *temp = new LIST<int>
чи
LIST<float> *temp = new LIST<float>

а дізнатись це можна тільки якщо знаєш тип зміної "value".
тут нужно уточнить у Эда, я С++ уже давно не использовал :-[
Но мне кажется то тут можно обойтись статической типизацией благодоря ad hoc полиморфизму темлейтов, так как для разных типов списков темплейты сгенерируют разные классы с одинаковым интерфейсом типа:
LIST<T> *temp = new LIST<T>

Кроме того метод конкатенации списков(которая я так понял будет в числе прочего осуществляться операцией +) лучше добавить в интерфейс класса LIST
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Edd.Dragon

#645
Цитата: ostman від 26 Травень 2009, 00:34:36щось простеньке типу "якщо зміна F типу float то щось зробити" ?
Без проблем, пиши на Java  C#  Delphi ;)


Цитата: ostman від 26 Травень 2009, 01:48:21мені потрібно щоб операція "+" працювала з декількома варіантами типів даних. вона повина створювати нові елементи списка, але для цього вона повина знати що виконати

Код:
LIST<int> *temp = new LIST<int>
чи
Код:
LIST<float> *temp = new LIST<float>

а дізнатись це можна тільки якщо знаєш тип зміної "value".
Что-то я не въехал.

1. <шось я тут нагнав пурги...>

2. Ты пишешь темплейт, реализующий список элементов типа T. А реально будет получатся список int-ов или список float-ов?! Когда у меня вообще был темплейт какого-то MyType, с ними ну никак не совместимого?! Что за прикол?! ))))))




Добавлено: 26 Травень 2009, 05:42:27

Цитата: ostman від 26 Травень 2009, 01:55:58void operator+(T velue);
Толку с оператора "+", не возвращающего результат?


P.S.: Так же тебе никто не запрещает после объявления темплейта так же объявить пару его стандартных реализаций (как например сделано с типом string - см. в соответствующем файле STL).

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

// ConcoleTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"


template<class T> class SomeType
{
private:
T _value;

public:
SomeType() : _value()
{
}

SomeType(T value)
{
_value = value;
}

operator T()
{
return _value;
}

SomeType<T> operator= (T arg)
{
return SomeType<T>();
}

SomeType<T> operator+ (SomeType<T> arg)
{
return SomeType<T>(_value + arg);
}

SomeType<T> operator+ (T arg)
{
return SomeType<T>(_value + arg);
}
};


typedef SomeType<int> IntType;
typedef SomeType<float> FloatType;

FloatType operator+(FloatType arg1, IntType arg2)
{
return FloatType((float)arg1 + (int)arg2);
}


int _tmain(int argc, _TCHAR* argv[])
{
IntType a(5);
IntType b(3);
FloatType c(1.5);

printf("\nBEFORE:\n");
printf("a = %d\n", (int)a);
printf("b = %d\n", (int)b);
printf("c = %f\n", (float)c);

a = a + 1;
c = c + b;

printf("\nAFTER:\n");
printf("a = %d\n", (int)a);
printf("b = %d\n", (int)b);
printf("c = %f\n", (float)c);



return 0;
}



ostman

Edd, я це не сам придумав і пишу не від великої радості, або невгамовного ентузіазма, я просто, на відміну від більшості однокурсників, інколи роблю лаби.
таке мое завдання на лабу по шаблонам класів, мені потрібно реалізувати динамічний(ні) список(ки) з обєктів шаблона класу і додатково перевантажити операці "+" - додавання елемента до списку(імя списку+значеня нового елемента), "--" - видаленя елемента з вершини списку, "==" - порівняння списків.
якщо на лекції нам правильно сказали то шаблони створюють тоді коли є необхідність декількох класів які відрізняються лише типом даних полів класу, тому щоб виправдати використання тут шаблонів потрібно щоб перевантажені операціїї могли працювати з декількома типами даних, щоб мати можливість створювати і виконувати дії над списками з елементами різних типів даних. напр. створити 4 списка, в двох з яких елементи типу int, в дного char в останього float, або якось інакше.

Edd.Dragon

#647
Цитата: ostman від 26 Травень 2009, 18:35:55тому щоб виправдати використання тут шаблонів потрібно щоб перевантажені операціїї могли працювати з декількома типами даних
Ошибаешься
Шаблон - законченый самостоятельный кирпичик.

Я тебе еще раз повторяю - с твоего шаблона я создаю массив барабашек и выйдет, что благодаря твоему шаблону я теперь могу к массиву барабашек приплюсовать массив интов, в результате чего получу массив флоатов!  :o Это все при том, что барабашки вообще невозможно в флоаты преобразовать...

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

Дай текст задания

Когда ты говоришь о списке флоатов - это ты говоришь уже об экземпляре шаблона. А твой шаблон - это список "чего-то по имени T". Всё. Нет никаких флоатов, интов, чаров. Есть T, под которым что угодно. И об этом нельзя забывать ни на секунду.


Цитата: ostman від 26 Травень 2009, 18:35:55напр. створити 4 списка, в двох з яких елементи типу int, в дного char в останього float, або якось інакше.
string - это vector<char>
я кроме этого создаю vector<float>

я их могу тупо сложить? Это два разных типа! Кому надо их сложить - определяют операцию преобразования, как у меня в примере выше. Только так и никак иначе. Значит выходит что в STL использование шаблона vector не оправдано, раз он без доп. уточнений умеет работать только с тем типом, с которым создан? Надо сказать это Страусструпу ;)

βεερ_βooρ

Цитата: Edd.Dragon від 27 Травень 2009, 12:51:58Шаблон - законченый самостоятельный кирпичик.
Причем очень сложный и делающий верификацию программ на С++ фактичеки почти невозможной из-за Тьюринг-полноты вычисления шблонов.44
Цитата: Edd.Dragon від 27 Травень 2009, 12:51:58Не могли вам задать написать шаблон массива любого типа, который должен жестко быть привязан к интам и флоатам, кроме этого некоторого типа.
Угу, так как вся идея полиформизма убивается.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

ostman

#649
Цитата: Edd.Dragon від 27 Травень 2009, 11:51:58
Не могли вам задать написать шаблон массива любого типа, который должен жестко быть привязан к интам и флоатам, кроме этого некоторого типа.

Дай текст задания

Когда ты говоришь о списке флоатов - это ты говоришь уже об экземпляре шаблона. А твой шаблон - это список "чего-то по имени T". Всё. Нет никаких флоатов, интов, чаров. Есть T, под которым что угодно. И об этом нельзя забывать ни на секунду.
це я затупив... як працовати з шаблонами в умовах динаміки нам не розказували, а сам я чогось не додумався прочитати/попробувати :-\, тому подумав що така команда не можлива
Цитатаtemplate<class T> LIST<T> * LIST<T>::operator+(T x)
{LIST<T> *temp = new LIST<T>;
temp->value=x;
temp->num=this->num+1;
temp->next=this;
return temp;};
і потрібно самому писати під який конкретно тип даних виділяти память