Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Для начинающих |
Автор: Metixa 2.11.2006, 20:02 |
давайте начинающие.. поделимся опытом, а если кто-то из проф-ов нам поможет им большой Благодарность |
Автор: Kuvaldis 2.11.2006, 20:25 |
Metixa, ты бы еще предложил: "давайте поговорим не знаю о чем". Не нарывайся на репрессии, задавай более конкретные вопросы |
Автор: Metixa 2.11.2006, 21:35 |
в этом книжке не понял я: стр. 247. ВНИМАНИЕ: Инициализировать динамический массив нельзя. как, это же инициализация члена массива #include<iostream> using namespace std; void main () { int r= 4; int *pi = new int[r]; *(pi+2) = 44; cout<<*(pi+2)<<endl; } что очень просто компуется... |
Автор: JackYF 2.11.2006, 21:41 |
Это не инициализация... Это просто запись по адресу, и все... что здесь особо непонятно... Говорится про то, что нельзя прямо в месте выделения массива присвоить его элементам определенные значения, как для статического массива... |
Автор: bsa 2.11.2006, 21:42 |
Там, наверное, имелось в виду, что нельзя сразу весь заполнить одной командой при выделении памяти. JackYF уже это сказал. ![]() |
Автор: Metixa 2.11.2006, 22:56 |
а здесь: #include<iostream> using namespace std; void main () { for(int i = 1; i<7; i++) {int *pi = new int(i); cout<<*pi<<endl;} } ?????????? Это наверно просто рядом записанные динамические данные, а не массив, правильно? |
Автор: apook 2.11.2006, 23:27 |
А там выше должно быть int **pi=new int [7]; а потом for(int i = 1; i<7; i++) {int *pi = new int [i]; |
Автор: Fazil6 2.11.2006, 23:42 | ||
это не массив. это динамическое создание интов. совсем не обязательно они будут подряд в памяти находиться |
Автор: Xenon 3.11.2006, 01:46 |
Fazil6, ... в C++ ![]() |
Автор: Fazil6 3.11.2006, 11:03 |
читал... много думал... о чем речь невтыркнул... |
Автор: Xenon 3.11.2006, 14:30 |
Fazil6, честно говоря я сегодня тоже ![]() ![]() Судя по всему я писал про расположение в памяти двумерных массивов в разных языках, только зачем ![]() |
Автор: vinter 3.11.2006, 14:34 | ||||
так ты не массив заполняешь, а каждый раз выделяешь новую память под указатель, соответсвенно в конце цикла pi будет указывать на последний элемент полученный в цикле, а к остальным ты обратиться не сможешь..
че то непонятно что ты пытался изобразить.. |
Автор: Metixa 4.11.2006, 22:17 |
всем благодарью |
Автор: Metixa 8.11.2006, 23:44 |
просьба, не ошибка на стр. 268. с низу 16 строке if(sum[j] > sum[nmin]) nmin = j; по моему <, а не >; |
Автор: bruja 9.11.2006, 22:46 |
Ребята, я недавно начала изучать С++ и иногда торможу. У меня тут программка, которая выдает группы чисел-близнецов до числа n. Ч-близнецы, это простые числа с разностью, равной 2. Мне надо, чтоб она еще выдавала максимальную пару Ч-Б. А я как не пишу, она мне все неправильно выдает... ![]() ![]() #include <stdio.h> #include <conio.h> #include <iostream.h> void main() {clrscr(); int i, j, k, n; int pred=1; printf("Vvesti n="); scanf("%i",&n); while (n<=0) {printf("Vvedite es4e raz n="); scanf("%i",&n);} for(i=3; i<n; i+=2) { k=0; for(j=2; j<=i/2; j++) if (i%j==0) k++; if (k==0) { if (pred+2==i) cout<<pred<<"&"<<i<<"- bliznetsi"<<endl; pred=i; } } getch(); } |
Автор: Metixa 10.11.2006, 00:18 |
прошу профам: что обшее между шаблоном функции и указателем на функции (просто интересно.. зараннее Благодарю!!! |
Автор: archimed7592 10.11.2006, 01:23 |
ничего ![]() что такое шаблон? шаблон это шаблон. ты в него можешь подставить заданные в нём же параметры (тип или константу) и получишь отдельную ф-цию на этапе компиляции. что такое указатель не ф-цию? это просто указатель на какую-ту существующую ф-цию. т. е. все ф-ции придется задать ручками. если ты про различие между вызовом шаблонной ф-ции и вызовом ф-ции по указателю, то различие такое же, как между вызовом обычной ф-ции и вызовом ф-ции по указателю. |
Автор: Metixa 10.11.2006, 01:44 | ||
#include <stdio.h> #include <conio.h> #include <iostream.h> int pred=1; void main() { int i, j, k, n; printf("Vvesti n="); scanf("%i",&n); while (n<=0) {printf("Vvedite es4e raz n="); scanf("%i",&n);} for(i=1; i<(n+1)/6; i++) cout<<6*i-1<<'-'<<6*i+1<<endl;getch(); } http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D1%8B%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0-%D0%B1%D0%BB%D0%B8%D0%B7%D0%BD%D0%B5%D1%86%D1%8B здес наидете формулу таких пар, обратите внимание на то что вам пара нужна с разницой 2, а не близкая число к - n; |
Автор: bruja 11.11.2006, 14:29 |
Metixa , ты не понял....у меня уже готовая прога...только надо дописать в ней пару строк, чтоб она еще выводила макс. пару близнецов. |
Автор: sasa 11.11.2006, 16:02 |
Ребята может кто поможет с прогой? мне нужна программка Алгоритма Витерби (т. е. Алгоритм сравнения двух строк и Хэммингова разность). Кто может помогите прогой, а то у меня аттестация, и не знаю как быть.... Спасибо!!!!! ![]() ![]() |
Автор: archimed7592 11.11.2006, 16:04 |
помогают в http://forum.vingrad.ru/Vingrad-help-center.html ;) |
Автор: Metixa 11.11.2006, 20:49 | ||||||
Добрый Вечер BRUJA!!! Я поньял что твоя версия тоже работает, просто я по короче тебе предложил, а попробуй вот так:
и по моему тебе станет легче..
|
Автор: Damarus 12.11.2006, 02:50 |
bruja, Metixa, пользуйтесь кнопкой Код. Не нарывайтесь на репрессии. |
Автор: Zloi_kot 12.11.2006, 07:28 |
А вот и сдрасьти!! Если кто знает киньте пажалста ссылочку где можно скачать с инета книжку по си++ да так чтобы там исче и написано понятьненько было ![]() |
Автор: TaNK 12.11.2006, 09:42 |
www.WMate.ru да и вообще пользуйтесь поисковиком....зачем такие вопросы задовать тут и не по теме! |
Автор: Metixa 12.11.2006, 19:36 |
Обясните что за кнопка кода? |
Автор: archimed7592 12.11.2006, 19:47 |
http://forum.vingrad.ru/index.php?act=legends&CODE=bbcode&s= 3-й снизу пункт. в форме ответа есть кнопочка "Код". в выпадающем списке выбираешь нужный язык (с++, к примеру) |
Автор: bruja 12.11.2006, 21:04 | ||
шпасибо, бум исправляться))) ![]() Добавлено @ 21:10 Metixa, спасибо.)) Но у меня от этого мозгов не прибавилось)) Как вывести максимальную пару близнецов? ![]() если у тя есть предложения, просто впиши эту строку в прогу... ![]() |
Автор: Damarus 12.11.2006, 21:23 |
Вот и хорошо ![]() |
Автор: Metixa 12.11.2006, 21:59 |
Bruja добрый вечер, не заметил ты?: for(i=3; i<=n; i+=2) я добавил "=". |
Автор: Metixa 13.11.2006, 01:30 |
Прошу вас помогите: когда выпольняю через пуск-выполнить, что-то мгновенно появляется и все.. |
Автор: archimed7592 13.11.2006, 01:37 |
пуск->выполнить->cmd->ok |
Автор: Metixa 13.11.2006, 12:01 |
Вопрос: в книжке стр: 283, снизу 9-ая строка: argv[] имеет тип char*.. а я спрашиваю почему не char**..? Благодарю... |
Автор: Metixa 13.11.2006, 12:57 | ||
Я очень прошу помощ.. много времени теряю.. стр. 284 снизу 1-ая окошечка, его не получается выдать, что-то в роде бы выпригивается но через мгновение изчезает, в командную строку пишу: "d:\b2.exe" a b c а прог:
|
Автор: Fazil6 13.11.2006, 13:02 | ||
а почему собственно ты решил, что должен быть char** ? передается массив С-строк, а не массив указателей на указатель на char |
Автор: archimed7592 14.11.2006, 02:09 | ||||
с точки зрения компилятора запись type arg [] в аргументах ф-ции эквивалентна записи char **. так что разницы нет. так то char ** и есть ;)
![]() Добавлено @ 02:19 коммандная строка - это где? если в cmd.exe, то все должно быть нормльно...если пуск->выполнить, то совет использовать
![]() |
Автор: Fazil6 14.11.2006, 11:56 |
в общем случае char *array[] не тоже самое, что char** |
Автор: Metixa 14.11.2006, 23:31 |
опять проблема.. стр. 287, снизу 9-ая строка: if(extreme == BIG && value > boundary) а сравнивать отрицательные числа..? |
Автор: archimed7592 14.11.2006, 23:44 |
я вот даже подчеркнул, что в аргументах ф-ции это то же самое. а в общем случае - да, не то же самое. |
Автор: Fazil6 14.11.2006, 23:55 |
ты, наверное, думаешь, что все тут на память помнят эту книгу, ну или как минимум из рук ее не выпускают Что необычного в сравнивании отрицательных чисел? |
Автор: Metixa 15.11.2006, 00:11 |
Fazil6 у тебя есть это книга? |
Автор: Fazil6 15.11.2006, 00:17 |
нет |
Автор: archimed7592 15.11.2006, 01:28 |
ну сравнивай на здоровье...в чем проблема? задавай более содержательные вопросы... http://www.ln.com.ua/~openxs/articles/smart-questions-ru.html |
Автор: Metixa 15.11.2006, 01:49 |
уже разобрался, благодарю |
Автор: Metixa 15.11.2006, 18:40 |
мне очень интересно следующее: возмем int nameofmas[] = {1,2,3,4}; понятно по теории что nameofmas это адрес первого элемента масcива и nameofmas то же самое что &nameofmas[0] оба выдает адрес первого элемента (+1 вопрос, почему cout<<nameofmas; и cout<<&nameofmas; - выдает одно и тоже ?); где записывается сама nameofmas, по какому адресу, он же все таки указатель - константа? я сфантазировал так : значит, гдето както сама nameofmas обьявлено как char строка - указатель, и еще он указывает на первый элемент массива и поетому он впыхнулся в "бутерброд" адреса первого элемента и cout<<nameofmas; и cout<<&nameofmas[0]; выдает одно и тоже.. "бутерброд" - назвал потому что на одном адресе записан и первый элемент и имя массива-констуказатель (что странно выгледит), а если это не так, тогда г д е з а п и с ы в а е т с я с а м а n a m e o f m a s??????? |
Автор: JackYF 15.11.2006, 19:01 |
nameofmas - локальная переменная. Адрес 0-го элемента массива. &nameofmas - адрес этой локальной переменной, который в общем случае никак не связан с адресом 1-го элемента. НО! Для статических одномерных массиввов это одно и то же, так как память выделяется в стеке, а самого указателя как такового отдельного нету... Может плохо объяснил... В любом случае &nameofmas лучше не пользоваться... зачем? |
Автор: Fazil6 15.11.2006, 19:48 | ||
имя массива - rvalue и такое подятие как адрес с ним не связано.
нигде |
Автор: JackYF 15.11.2006, 19:54 |
Но адрес-то существует. Переменная-то есть. |
Автор: Fazil6 15.11.2006, 19:57 | ||
имя массива это не переменная. Единственный адрес с которым оно связано - адрес первого элемента. |
Автор: Metixa 15.11.2006, 20:48 |
имя массива же есть конст указатель, а как без адреса, вот имя масива да: nameofmas, как он может быть без адреса, n a m, потом e..o..f.m..a..s---- это же тоже последовательность котрый гдето надо запи с а т ь, а где, он же не может висеть на "воздух"... извините за зацикливания, но пока не докапаюсь до к о н ц а, не могу продолжать учебу (может быть вредная привичка...) Добавлено @ 20:50 имя массива же есть конст указатель, а как без адреса, вот имя масива да: nameofmas, как он может быть без адреса, n a m, потом e..o..f.m..a..s---- это же тоже последовательность котрый гдето надо запи с а т ь, а где, он же не может висеть на "воздух"... извините за зацикливания, но пока не докапаюсь до к о н ц а, не могу продолжать учебу (может быть вредная привичка...) ![]() |
Автор: Fazil6 15.11.2006, 22:09 |
почитай http://faqs.org.ru/progr/c_cpp/cfaqrus.htm там в п.2 эти вопросы перетираются |
Автор: Metixa 15.11.2006, 22:57 | ||
благодарю Fazil6 НО: Объявление массива "char a[6];" требует определенного места для шести символов, которое будет известно под именем "a". То есть, существует место под именем "a", в которое могут быть помещены 6 символов. как понять - "под именем "a". "? где компилятор прочитает что это имя "а" а не "Gospodin_Karuzo" ????? |
Автор: Metixa 16.11.2006, 12:27 |
почему ++ к имени массива требует lvalue (понятно что имя массива константа) а если этот argv дается main - у из командной строки тогда к ++argv -- "зеленный цвет"? |
Автор: Fazil6 16.11.2006, 13:08 | ||
в параметрах функций массив преобразуется просто к указателю |
Автор: Dov 16.11.2006, 16:49 | ||||||||||||||||||||||||||
Ну, что ж, попробую и я объяснить необъяснимое. Указатели и массивы. В языке С существует очень тесная связь между указателями и массивами. Любое действие, которое можно совершить с помощью массивов, можно так же сделать и с помощью указателей. Когда мы объявляем массив:
то это значит, что X - это массив из 8 элементов, имеющих тип int и расположенных в ячейках памяти непрерывно. Это даёт нам возможность обращаться к элементам массива по индексу, начиная с X[0] и до X[7]. Схематично это можно изобразить так:
Таким образом, когда мы объявляем массив, то это значит, что мы объявляем непрерывность ячеек в памяти и плюс к этому мы объявляем указатель, в котором хранится адрес начала массива в памяти компьютера. Этим указателем и является имя массива, в нём же и содержится адрес первого элемента массива, т.е. адрес элемента с индексом 0, т.е. адрес X[0]. Схематично это можно изобразить так:
Например, если массив начинается с адреса 1000, то X[0] находится по адресу 1000, X[1] - по адресу 1004, X[2] - по адресу 1008 и т.д.(при условии, что тип int - 4 байта). Схематично это можно изобразить так:
То есть, можно сказать, что указатель, в котором хранится адрес первого элемента массива - это особая ячейка памяти, а его имя - это имя массива. Надеюсь, понятно. Тогда идём дальше. Имя массива, как указатель. Напомню ещё разок: имя указателя, в котором хранится адрес первого элемента массива - это имя самого массива. Когда мы объявляем массив элементов типа int, это значит, что имя массива - это переменная типа int*, т.е. указатель на тип int. Когда мы объявляем массив элементов типа double, это значит, что имя массива - это переменная типа double*, т.е. указатель на тип double и т.д. Например:
Когда мы объявили массив arr, то мы объявили 5 непрерывных ячеек в памяти типа long и ещё мы объявили дополнительную переменную с именем arr (типа long*), хранящую адрес первой ячейки массива. Если массив начинается с адреса 2020, то схематично это можно изобразить так(если тип long занимает 4 байта):
Все элементы массива arr - это элементы типа long. Имя массива arr - это переменная типа long* и она содержит адрес первой ячейки массива, т.е. адрес arr[0]. Применение имени массива, как указателя. Объявляем массив:
Не забываем, что аr - это переменная типа int*, потому что аr содержит адрес ячейки типа int, т.е. аr - это указатель на тип int. Попробуем использовать аr так, как мы бы использовали любой другой указатель.
Если ar - указатель на тип int, то *ar - это содержимое ячейки памяти, адрес которой хранится в ar, т.е. это равнозначно:
Как и равнозначны следующие две записи:
Разница между именем массива и указателем. Указатель - это всё же переменная и мы можем изменять её значение. Имя массива - это хоть и указатель, но имеющий постоянный адрес, который изменить мы не можем. Пример:
Пока всё. ![]() |
Автор: Fazil6 16.11.2006, 17:20 | ||||
нет. arr имеет тип long[5], а не long*. arr может использоваться как long * const, но не long*. Повторю еще раз имя массива - это не переменная. единствено при передаче массива в параметрах функции передается переменная типа указатель-на-типэлементамассива(неконстантный). |
Автор: Dov 16.11.2006, 17:35 | ||
Fazil6, ты пытаешься спорить, не понимая о чём. Ты до конца дочитал? Если да, то прочти ещё раз, но повнимательнее, а потом поговорим. ![]() |
Автор: Fazil6 16.11.2006, 17:43 | ||
и что же я не понял? |
Автор: Dov 16.11.2006, 18:01 |
Оттого, что arr - const, он не перестал быть long *, т.е. он по-прежнему хранит адрес, а значит он является указателем на тип long, а указатели на тип long имеют тип long *. К тому же, он может изменять значения своих элементов, как обычный указатель. |
Автор: Fazil6 16.11.2006, 18:30 |
да уж..... это ты ничего не понял. То, что имя массива может использоваться в выражении как константный указатель не означает, что оно является переменной-указателем. тип long[] != long[5] != long * != long * const это разные типы |
Автор: Dov 16.11.2006, 18:44 |
Fazil6, тебе что, на иврите объяснять нужно, по-русски твая-мая не панимай, учи матчасть, не грузи. |
Автор: JackYF 16.11.2006, 18:50 |
Fazil6, где отличия между первым и вторым? А также принципиальные различия с четвертым? |
Автор: Fazil6 16.11.2006, 19:22 | ||||
ну с первым вариантом я погорячился... посмотри что выдаст вот такой код
|
Автор: JackYF 16.11.2006, 19:32 | ||
Не, нормально? Ты пытаешься присвоить указателю на инт АДРЕС указателя на инт? И что ты после этого хочешь??? mmm и nn уже сами по себе указатели. Добавлено @ 19:33 Fazil6, молодец, быстро отредактировал ![]() Тебе осталось еще убрать это же самое в выводе. |
Автор: Fazil6 16.11.2006, 19:35 | ||
![]() int **ncm = &mmm; Добавлено @ 19:36 а в выводе тебе что не устраивает? |
Автор: JackYF 16.11.2006, 19:38 | ||
А вот это уже логично, что скомпилируется... Но что ты этим доказал? Добавлено @ 19:40 Да, я теперь понял, что ты хотел сказать... Но, все-таки, что ты этим доказал? из сказанного ранее? Несовместимость каких типов? |
Автор: Fazil6 16.11.2006, 19:41 | ||
как раз не скомпиллируется ![]() |
Автор: JackYF 16.11.2006, 19:42 | ||
Понятно, что long* и long* const - разные... а насчет остального что? Добавлено @ 19:45
Мое сообщение относилось к пред. версии твоего поста ![]() ![]() Так несовместимость каких типов ты этим доказал? Кроме ( long* != long* const ) ? |
Автор: Fazil6 16.11.2006, 19:45 | ||
я не говорил, что типы несовместимы. Эти типы приводятся друг другу (не во всех комбинациях конечно), но это разные типы. А то, что выводися cout показывает, что имя массива - это не int* |
Автор: JackYF 16.11.2006, 19:57 | ||||||
Конкретнее: чем отличаются long* const, int[] и int[5]?
Да. Это int* const... Потому что:
Выведет 4.
Я передал тип int[], не так ли? sizeof вернула уже 4, а не 20. sizeof( int[] ) вообще не сработает, так как int[] - incomplete type. При любом ИСПОЛЬЗОВАНИИ "типа" int[] комплилятор считает его int* const, и все дела... Отсюда отсуствие принципиальной разницы... |
Автор: Dov 16.11.2006, 19:57 | ||
А что же это по=твоему, и что у тебя cout показывает ![]() |
Автор: Fazil6 16.11.2006, 20:10 | ||||||
нет. Все не так. я ведь в выводе использую массив и именно int* const, и выводит разное. Ведь и имя массива и указатель указывают на одно и тоже, но и sizeof и взятие адреса выдают разные результаты для одного и другого. Так почему вывод, что компиллятор считает эти вещи одним типом? Это разные типы. Теперь по поводу твоей функции my_func. Передать массив по значению нельзя. Всегда при передаче массива как параметр функции создается временная локальная переменная указатель (в данном случае int*) и инициализируется адресом первого элемента. Причем это не константный указатель. Поэтому у тебя и получается такой результат
здрасте! посмотри, что я попросил вывести и как выводится. Где там отсутствие разницы? |
Автор: JackYF 16.11.2006, 20:43 | ||
sizeof() - использование?
Да, согласен. Неправ. Ну а то, что адреса указателей разные - так это, по-моему логично... Две переменные не могут иметь однинаковый адрес. Добавлено @ 20:46 Такого типа как ТИПА не существует. Его объявление и sizeof() - заморочки компилятора времени компиляции. Там, где он используется( не адрес берется и не sizeof(), а индексируется с целью получения элементов ), он ничем не отличается от int* const... Вот, по-моему, и все... |
Автор: Fazil6 16.11.2006, 20:52 | ||||||
фокус не в этом, а в том, что
выведет одно и тоже, а
выведет значение указателя и адрес, переменной mmm Это к разговору о том, что имя массива это переменная, которая хранит адрес первого элемента. Если бы это была переменная, то можно было бы узнать ее адрес. |
Автор: JackYF 16.11.2006, 21:29 |
![]() ![]() ![]() Нафиг тебе адрес переменной??? ) Ну выдает она адрес первого элемента ![]() |
Автор: archimed7592 16.11.2006, 22:03 | ||
Dov, Fazil6, JackYF,
|
Автор: JackYF 16.11.2006, 22:05 |
archimed7592, гениально! Но я в принципе это же и сказал. |
Автор: Fazil6 16.11.2006, 22:13 | ||||||
вы мне говорите, что имя массива интов это переменная указатель на инт. Я вам говорю, что массив - это массив, а указатель - это указатель, что это не одно и тоже, хотя и тесно связано. подсунь компиллятору вот такой коди он тебе покажет какой тип у nn
Добавлено @ 22:21
прочитай внимательно
т.е. он не является an rvalue of type “pointer to T” он может конвертироваться в него |
Автор: archimed7592 16.11.2006, 23:03 |
Fazil6, такой код не должен компилиться...&nn - это нечто непонятное...не все, что прогатывает компилятор есть правильно...хотя такое вообще не проглотит зы. http://forum.sources.ru/index.php?showtopic=160122, ребят...смеху ради ![]() |
Автор: Fazil6 16.11.2006, 23:14 | ||
кстати ничего непонятного в &nn нет - это компиллятором должно интерпретироваться как указатель на массив. |
Автор: archimed7592 16.11.2006, 23:27 |
с каких пор должно? можно цитатку из стандарта? |
Автор: Fazil6 16.11.2006, 23:43 |
стандарта у меня нет. Инфа из ссылки, которую я уже здесь давал пару страниц назад http://faqs.org.ru/progr/c_cpp/cfaqrus.htm п 2.13 |
Автор: JackYF 17.11.2006, 15:46 | ||
А я и сказал, что при использовании... - то есть конвертируется при надобности ![]() А вообще уже вроде бы все более-менее ясно стало. |
Автор: Metixa 18.11.2006, 02:38 | ||
все было прикрасно и полезно и .и.и но из за моей неопытности все еще не поиму: int nameofmas[] = {1,2,3,4}; вот пока этот массив отправят в функцию как аргумент, г д е зафиксировался сама фраза nameofmas, он не записан на адрес первого элемента массива, потоиу что по тому адресу (4 баит) записан "1", он (nameofmas) пока не указатель что ему было выделено другои адрес, тогда обьясните мне где помнит комп. что после буквы "n" следует "a", потом "m", далше идет "e" и т.д. (nameofmas) ![]() |
Автор: archimed7592 18.11.2006, 03:03 |
Metixa, советую перечитать свой пост и постараться самому понять что ты там написал... к слову, имена переменных нигде никто не помнит...после компиляции эти имена не сохраняются... |
Автор: Metixa 18.11.2006, 04:12 | ||
если я не ошибаюсь после компиляции память которым ползовались лок. переменные освобождается, но перед освобождением они сушествуют не так?
где то, хоть "максимально временно" имена "a" и "b" же записывается, иначе как комп. выдаст 3 и 8???? |
Автор: archimed7592 18.11.2006, 04:30 | ||
зы. вообще говоря в реальности такие массивы хранятся локально т. е. на стеке...т. о. получаешь что-то вроде mov [ebp-32], ebp-8, где ebp-8 - адрес массива, т. е. адрес относительно верхушки стека, а не какой-то четкий адрес. |
Автор: Mixeer 19.11.2006, 04:02 |
люди помогите! Тока начал учить с и срочно надо написать такую программу: Тема «Шифрование двоичных данных. Дешифрование двоичных данных» Метод шифрования основан на замене исходной последовательности битов a последовательностью b в которой a1=b1 ,bi=1 , если a=a(i-1) , и 0 в противном случае (i=1,2,3…n). входные и выходные данные - двоичные файлы ддлложности возникают с операциями с битами! |
Автор: JackYF 20.11.2006, 14:16 |
Mixeer, твои дествия должны быть следующими... 1) Пойти в Центр Помощи! 2) Создать новую тему! |
Автор: timurka 20.11.2006, 15:31 |
Помогите, хочу сделать программу которая будет переводить символы в цыфры. Вот код который пытался использовать: #include<iostream.h> #include<conio.h> void main() { clrscr(); float a,b,c; char kod; cin>>kod; if (kod=="a") cout<<"1"; else if (kod=="b") cout<<"2"; else if (kod=="c") cout<<"3"; getch(); } Программа не хочет запускаться, выбивает ошибку: "cannot cover `char` to `char *`". Что нужно сделать чтоб запустить программу? |
Автор: Dov 20.11.2006, 15:36 | ||
|
Автор: timurka 20.11.2006, 15:41 |
Огромное спасибо!!! ![]() |
Автор: timurka 20.11.2006, 23:40 |
Я сделал программу, которая кодирует символы в цыфры. Есть возможность одновременного перевода от 1 до 5 символов. При одновременном переводе от 1 до 4 символов все нормаль при переводе 5 символов программа вместо кода символа R выводит код символа E, я все проверил ошибки нет в программе не знаю в чем дело. Из-за чего может выводить неверное значение? |
Автор: archimed7592 21.11.2006, 00:35 |
timurka, если покажешь программу или уточнишь свой вопрос, то вероятность, что тебе помогут сильно возрастёт...здесь телепатов нет ![]() |
Автор: timurka 21.11.2006, 15:17 |
Я решил проблему, спаибо за беспокойство. Теперь есть еще одна. Я хочу сделать программу, но она сильно большая и поместить в один файл не получаеться. Как то можно из нескольких файлов сделать один .exe ? |
Автор: JackYF 21.11.2006, 16:07 |
Уточни вопрос. Собрать проект, что ли, из нескольких .cpp - файлов? Тогда все зависит от используемого компилятора. |
Автор: timurka 21.11.2006, 16:14 |
Да проект. Boralnd C++ 3.1. Вот. Надеюсь я то написал) Добавлено @ 16:15 Borland C++ 3.1. |
Автор: JackYF 21.11.2006, 16:20 |
timurka, сложный случай... с данным компилятором. Не так давно, кажется, поднимались темы про этот компилятор, попробуй поиск... Если не найдешь, попробуй разобраться сам... Тебе должно помочь меню Project в редакторе... |
Автор: Metixa 24.11.2006, 21:11 | ||
помогите: после
"p" понятно что =123 но и "a" станивится 123, почему? |
Автор: JackYF 24.11.2006, 21:16 | ||
Это нормальные поведение strtok. Для того, чтобы получать дальнейшие "токен"ы, вызывай:
|
Автор: Metixa 24.11.2006, 22:02 |
благодарю, это знаю, но все так и удивляюсь, следующих слов "p" и так получает, а "a" зачем меняется, т.е. два переменных тратиться для одной цели... |
Автор: JackYF 24.11.2006, 22:04 |
Ну дык так написали функцию... ![]() Не нравится - можешь написать свою ![]() |
Автор: archimed7592 24.11.2006, 22:28 |
Metixa, напиши свою ф-цию - тогда поймешь почему эта работает именно так ![]() |
Автор: Metixa 25.11.2006, 02:27 | ||
да, может .. когда та напишу но сейчас такая маленькая задача была:
он выдает количество разных слов.. в строку.. по проще можно было? |
Автор: archimed7592 25.11.2006, 04:06 | ||
слов разделенных только запятыми? конечно можно - посчитать кол-во запятых
|
Автор: sasa 25.11.2006, 13:04 |
Очень очень прошу киньте мне ссылку на Электронно-цифровую подпись RSA. Мне нужна прога на C++.ИМли выложьте правильную прогу на форуму!Пожалуйста! Просто у меня аттестация по С++, please.......Пасиб!![]() |
Автор: timurka 25.11.2006, 16:39 |
Кто-нибудь подскажет как заставить программу записывать результат своих вычислений в текстовый файл, вместо вывода на экран cout<<? И как сделать чтоб она могла считывать даные с файла вместо cin>>? И как указать директорию в которой находиться файл? |
Автор: timurka 25.11.2006, 19:05 |
Плиззз, помогите! Сам пытался разобраться, но не получаеться. Помогите! |
Автор: Dov 25.11.2006, 21:56 |
|
Автор: timurka 26.11.2006, 10:29 |
Пасибки! |
Автор: timurka 26.11.2006, 15:43 | ||
В чем тут ошибка?
|
Автор: archimed7592 27.11.2006, 01:43 |
timurka, заставить cin\cout работать с файлами можно, к примеру, извне: myprogram.exe < input.txt > output.txt |
Автор: JackYF 27.11.2006, 14:27 | ||
Здесь в цикл while нужно обернуть 2 строки, а не одну:
Где-то так. |
Автор: timurka 2.12.2006, 14:58 | ||
Подскажите, пожалуйста! Как можно считывать с файла линию цифр? Можно ли это делать при помощи getline()?
С этим кодом не получается. |
Автор: Anikmar 2.12.2006, 19:22 |
Интересно, а что вы хотели проверить в данном условии: ... float zifr[46],zifr2[46]; ... if (zifr==1234) cout<<”Текст 1”; else if (zifr==1245) cout<<”Текст 2”; ... Согласно правилам языка Си zifr является указателем на массив (т.е. адрес). Вы проверяете соответствие значения указателя числу 1234? |
Автор: timurka 2.12.2006, 19:41 |
Если файл содержит, к примеру, 4 строки и в каждой строке записано по одному четырехзначному числу. Как можно считать все строки, чтоб потом можно было поставить условие по поводу содержания строк, тоесть чтоб потом можно было оперировать каждой строкой по отдельности, а не всеми вместе? Если в строке №1 записано число 1245, то вывести на экран одно сообщение...если в строке №3 число 1576, то вывести еще одно сообщение. |
Автор: Okonner 3.12.2006, 21:21 |
Здравствуйте, господа! Как использовать буфер клавиатуры, для фиксирования последней нажатой клавиши. Что такое буфер клавы? |
Автор: Metixa 28.12.2006, 21:12 | ||||
Добрый вечер!!! archimed.... Благодарью за помощи.. не поможеш разобратся еще лучше, не даш мне ссылку по поводу всего этого..? ![]() ![]() |
Автор: archimed7592 29.12.2006, 17:57 |
неа, не дам...у меня всё это с опытом пришло и единого источника как такого либо нету либо я про него не знаю ![]() хотя нет...http://www.google.com ![]() |
Автор: hip 5.2.2007, 17:48 | ||||
Здравствуйте! Мне нужно сделать программу, которая будет проверять верность цыфр в файле. Я Сделал, но проблема в том, что программа вместо четырех символов до пробела считует по одному символу.
Пробовал через getline(), но так выбивает непонятную ошибку.
Не знаю что делать, помогите пожалуйста. Добавлено @ 17:52 Русские символы вместо расширения это ошибка шрифта, тоесть в программе там вместо "вфе" dat, а "ышд" sol, это я ошибся когда вводил на форуме, в проге все нормально |
Автор: ip127001 8.2.2007, 09:33 |
![]() сторок что бы всем становилось понятно, что вы не шутите ![]() Добавлено @ 09:36 конкретней сформулиру задачу... что в начале, что в конце а то бошка болит, мочи нет в твоей кулебяке разбираться..проще самому написать |
Автор: hip 10.2.2007, 19:31 | ||
В общем есть файл в котором записано по 4 цыфры через пробел, например: 5673 3452 2673 1561 и т.д. Нужно чтоб программа находила в файле только определенные комбинации из 4 цыфр и помещала их в другой файл. Если использовать для условия if(), то не возможно компилировать так как не хватает памяти. Через switch() все получается, но программа вместо сразу четырех символов считывает по одному и сверяет с условием только одну цыфру, а в условии 4-ех значные цыфры и ничего не выходит. Что можно сделать? Через getline() тоже пробовал, но выбивает непонятную ошибку и компилировать не получается.
|
Автор: nickless 10.2.2007, 19:57 |
Посмотрел на твой код... 1. main() должна возвращать int 2. после попытки открыть файл, надо проверить, открылся ли он вообще (if (!file) { ... }) 3. Каждый файл нужно закрывать после использования (file.close()) 4. зачем открывать файл для вывода в цикле? + см. пкт. 3. 5. чтобы сравнить kod с чем-нибудь, надо бы сначала прочитать в него что-нибудь (file >> kod) 6. kod объявлен как char, это одна буква (0<=char<255), а сравнивается он с чем? объяви kod как int 7. switch на несколько сотен цифр это изврат, если нельзя как-то вычислить эти числа, то хотя бы запиши их в массив и ищи в нём (лучше бинарно, быстрее будет) |
Автор: Xenon 10.2.2007, 22:43 |
nickless, ну это здесь не так уж и важно, так как при выходе из функции он закрывается. Это не так важно тут. Важно, если в пределах одной функции файл используется для ввода, потом для вывода. ИМХО ![]() |
Автор: Anikmar 10.2.2007, 22:50 | ||
Я чего-то этого не узрел file.open("SH.dat"); while (! file.eof()) { ofstream of; of.open("SHI.sol",ios::app); Вроде разные... nickless прав. Весь код выглядит несколько неправильным... |
Автор: Xenon 10.2.2007, 23:11 |
Anikmar, что? Я теоретически говорил. Ну по-любому смысла закрывать особого тут нет (хотя бы потому что код бредовый какой-то) Хотя, если код длинный, мы читателю кода можем таким образом показать, что дальше файл не используется, или что-нибудь еще ![]() |
Автор: nickless 10.2.2007, 23:37 |
Xenon, да, в принципе файлы закроются при вызове деструктора, но всё равно нехорошо ![]() Да и нечего привыкать к плохому стилю, потом многих ошибок можно будет избежать, если всегда и везде (за исключением особых случаев) всё инициализировать, проверять, закрывать, освобождать... |
Автор: Xenon 11.2.2007, 01:16 |
nickless, Ну, в принципе, согласен с тобой (особенно после прочтения Саттера о 101 правиле). Но если проводить аналогию с объвлению всех переменных неизменяемых как const(15 совет у Саттера) , то закрытие файла после того, как он больше не понадобится необходимо для того, чтобы показать, что дальше файл не будет использоваться. PS. Хотя аналогия такая ... шаткая ![]() |
Автор: БайкодромКосмодур 14.3.2007, 08:12 |
Я в программировании полный Лох. Приобрёл книжки, сижу изучаю и в принципе вопросов не возникает, но проблема в том, что необходима практика. Самому придумывать задачи не получается. Может, кто посоветует как быть, может, есть смысл пойти на курсы или на второе высшее. |
Автор: Dimanc 18.4.2007, 20:16 | ||
Решил изучить с++(изучал раньше паскаль). раздобыл книгу дейтела. а первая прога не компилируеться. У меня bcb 6. расскажите, пожалуйста, подробно, как надо компилировать.(как я понял ошибка то ли в obj- файле, толи даже он не получаеться) Вот код программы хеллоу ворлд)
ps извините, если такой вопрос уже поднимали |
Автор: mr.Anderson 18.4.2007, 20:21 | ||
А потом, говори, что за ошибка. Потому как вряд ли из-за этого небольшого недочета вылезет ошибка obj. Это, скорее, что-то с IDE. Давай ошибку. |
Автор: Dimanc 18.4.2007, 21:22 | ||
то же самое, если просто main() |
Автор: Fazil6 18.4.2007, 23:03 | ||
тебе нужно выбрать создание нового проекта и в нем выбрать тип "консольное приложение", а вообще советую взять поновее книгу. Судя по примеру у тебя что-то древнее Сейчас модно писать такое так
|