forum.rastrnet.ru

forum.rastrnet.ru (http://forum.rastrnet.ru/index.php)
-   Программируем (http://forum.rastrnet.ru/forumdisplay.php?f=35)
-   -   С++ (http://forum.rastrnet.ru/showthread.php?t=37510)

XakkeP 04.11.2007 19:15

С++
 
есть задача незнаю как написать её на С++ чтоб она правильно работала
помогите!!!

Задача: целой переменно S присвоить сумму трехзначного целого числа k.
вот и вся задача.

Casy 04.11.2007 20:04

void main()
{
int s, k, n;

cin >> k;
s = 0;
while(k != 0)
{
n = k % 10;
k = k / 10;
s = s + n;
}
cout << s;
}

XakkeP 04.11.2007 20:06

большое спасибо

XakkeP 04.11.2007 20:30

Цитата:

Сообщение от Casy (Сообщение 550504)
void main()
{
int s, k, n;

cin >> k;
s = 0;
while(k != 0)
{
n = k % 10;
k = k / 10;
s = s + n;
}
cout << s;
}

выдаёт ошибку
ftp://10.10.10.9/incoming/uNsOrT/FIVT/erorr.bmp
и вообще помойму получилось не правильно потому что не хватает функций printf и scanf

Casy 04.11.2007 21:00

Алгоритм решения такой:
s = 0;
while(k != 0)
{
n = k % 10;
k = k / 10;
s = s + n;
}
а ввод и вывод, с нужными include делай сам.

ЗЫЖ побуквенно сравни что написано и у меня, и что у тебя

eXiLe 04.11.2007 21:14

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

2. Уплотнить заданную матрицу удаляя из нее строки и столбцы, заполнеными только отрицательными элементами. Найти сумму модулей элементов. расположенных ниже главной диагонали.

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

:help::help::help::help::help:

MebiuS 04.11.2007 21:58

Цитата:

Сообщение от XakkeP (Сообщение 550513)
выдаёт ошибку
ftp://10.10.10.9/incoming/uNsOrT/FIVT/erorr.bmp
и вообще помойму получилось не правильно потому что не хватает функций printf и scanf

во первых. нет инклюдов
во вторых неправильно написал. cout

TiRex 04.11.2007 22:23

вы уверены с выбором факультета7 меня уничтожают такие же вопросы моих одногруппников. правда с фразой 2я ничерта не понимаю в потоках2. а главное что не знаете даже как вывести что-то на экран. вас никто тянуть не будет. ведья есть такая вещь как экзамен и курсовые... млять сижу и плююсь кого нам готовят... грёбаные инженеры... в техан бы вас1
пс6 не работает шифт. часто вместо запятых точка и вместо гневных смайликов цифры. советую тем кто поступил на информатику переходить в кулинарный.
ппс6 вместо k = k / 10; красивее k/=10; шоб они повешались...

REY 05.11.2007 14:39

Может у кого есть пара минуток глянуть, где я скосячил.
Вобщем задача такова. Нужно ввести две строки, а потом сделать из них одну строку и вывести на экран.
Мое решение:
Цитата:

#include <iostream.h>
int main()
{
char *pStr1= new char[30];
char *pStr2= new char[30];
int i,j;
cout << "Vvedite pervuiu stroku: \n";
cin.getline (pStr1, 30);
cout << "Vvedite vtoruiu stroku: \n";
cin.getline (pStr2, 30);
for (i=0; pStr1[i]!=0; i++)
{
}
for (j=0; pStr2[j]!=0; j++)
{
pStr1[i+j+1]=pStr2[j];
cout <<pStr1[i+j+1];
}
return 0;
}

То есть алгоритм такой-с:
1. Вначале я перебираю все элементы первой строки, и получаю число i, которое является индексом последнего элемента в 1-ой строке.
2. Перебираю элементы второй строки, попутно присваивая нужные значения первой строке. Т.е если у меня i получилось в первом переборе равное 3, то по идее в первую строку в элемент с индексом 4 ляжет значение второй строки с нулевым индексом. Вот. Ну и попутно вывожу элементы строки на экран.
Результат. Она выводит просто вторую строку и все. Я не понимаю почему не работает. (Может вывод не так организовал?)

Сабля 06.11.2007 00:28

Цитата:

Вот. Ну и попутно вывожу элементы строки на экран.
Результат. Она выводит просто вторую строку и все.
Сам с собой разговариваешь? 1-ю то часть строки кто будет выводить? Дядя?
А память выделять в первой строке под сумму строк кто будет?
А чо пакет работы со строками нынче не в моде?

COBEHOK 06.11.2007 22:59

У вас задача написать на C или все-таки на С++? Или препод сам не знает?
Код:

#include <iostream>
#include <string>

using namespace std;

void main()
{
  cout << "Please, fill the first string\n";
  string str1;
  cin >> str1;

  cout << "Please, fill the second string\n";
  string str2;
  cin >> str2;

  string str3 = str1 + str2; // можно обойтись и без этой строки
  cout << "Result string is " << str3 << "\n";
}


REY 07.11.2007 14:48

Раз здесь пишу, значит C++.
string это функция работы со строками? В любом случае мне надо делать без этой функции.

COBEHOK 07.11.2007 16:04

Цитата:

Сообщение от REY (Сообщение 552130)
Раз здесь пишу, значит C++.
string это функция работы со строками? В любом случае мне надо делать без этой функции.

string - это спецификация шаблона basic_string, представляющего строку и операции с ней, для случая однобайтных строк. Для юникода следует пользоваться wstring. Можешь считать string классом.

REY 07.11.2007 16:54

СОВЕНОК - спасибо за инфу.
Цитата:

1-ю то часть строки кто будет выводить?
Единственная полезная вещь из всего поста. Но и за нее спасибо. Я таки не правильно организовал вывод (память там под все выделена).
Вобщем все сделал, вопрос более не актуален.

Сабля 07.11.2007 21:57

Цитата:

Сообщение от REY (Сообщение 552183)
Единственная полезная вещь из всего поста. Но и за нее спасибо. Я таки не правильно организовал вывод (память там под все выделена).
Вобщем все сделал, вопрос более не актуален.

Ага-ага... А теперь поставь варнинг левел =4 и откомпилируй на release... А потом сделай 2 слова, чтобы в сумме было больше 30 символов. И погляди как будет работать твоя прога.
Просто на debug компилятор сам исправляет твои ошибки.
Будущие программисты блин.. а даже элементарной логики в мышлении нету.

REY 08.11.2007 13:21

Хватит уже выпендриваться :) Какая разница под сколько символов я выделил память? Эта прога не будет иметь практического применения, здесь имеет значение лишь работоспособность алгоритма. А вместо 30, написать например 1000 и обезьяна сможет.

COBEHOK 08.11.2007 15:24

Вместо того, чтобы прислушаться к совету Сабли, ты начинаешь строить из себя умника. А "алгоритм" как-раз и дерьмовый :) И это твое поделие показывает:
1. Что ты не знаешь, что строка заканчивается нулем.
2. Что такое переполнение буфера ты тоже не в курсе.
3. Понятия оптимальности и временной сложности для тебя пустой звук, иначе ты бы не дергал вывод в цикле.
4. Что память неплохо-бы освобождать за собой тебе тоже никто не сказал.

REY 08.11.2007 16:28

Цитата:

Что ты не знаешь, что строка заканчивается нулем.
Конечно, и именно по этому в циклах перебора строк ,сказал перебирать элементы, пока значение строки не станет равным ноль символу.
Цитата:

Что память неплохо-бы освобождать за собой тебе тоже никто не сказал.
В конечном варианте программы память освобождена.

Короче, раз я такой неудачник, то у меня к тебе просьба. Вот конечный вариант программы:
Цитата:

#include <iostream.h>
int main()
{
char *pStr1= new char[30];
char *pStr2= new char[30];
int i,j,n;
cout << "Vvedite pervuiu stroku: \n";
cin.getline (pStr1, 30);
cout << "Vvedite vtoruiu stroku: \n";
cin.getline (pStr2, 30);
for (i=0; pStr1[i]!=0; i++)
{
}
for (j=0; pStr2[j]!=0; j++)
{
pStr1[i+j]=pStr2[j];
}
cout << "Itogovaia stroka: \n";
for (n=0; n<(i+j);n++ )
cout <<pStr1[n];
cout <<endl;
delete []pStr1;
delete []pStr2;
return 0;
}
Не мог бы ты подсказать, как этот "дерьмовый" алгоритм оптимизировать, дабы исключить "временную сложность" и прочие беды.
Если подскажешь, то искреннее тебе спасибо за это.

COBEHOK 08.11.2007 20:06

Цитата:

Сообщение от REY (Сообщение 552816)
Конечно, и именно по этому в циклах перебора строк ,сказал перебирать элементы, пока значение строки не станет равным ноль символу.

Обрати внимание на строку pStr1[i+j+1]=pStr2[j]; из предыдущего варианта

Цитата:

Сообщение от REY (Сообщение 552816)
Не мог бы ты подсказать, как этот "дерьмовый" алгоритм оптимизировать, дабы исключить "временную сложность" и прочие беды. Если подскажешь, то искреннее тебе спасибо за это.

Это вариант уже лучше. Осталось только убрать последний цикл и вывести итоговую строку за раз. Можно еще перейти с индексов на указатели - мне кажется так код будет понятнее и не нужна арифметика на индексах

Код:

#include <iostream.h>
int main()
{
  cout << "Vvedite pervuiu stroku: \n";
  char szStr1[60]; // здесь динамическая память особо не нужна + 30 символов под вторую строку
  cin.getline(szStr1, 30);

  cout << "Vvedite vtoruiu stroku: \n";
  char szStr2[30];
  cin.getline(szStr2, 30);

  char* pIt1 = szStr2;
  while(*pIt1) ++pIt1; // pIt указывает на завершающий ноль
 
  for(char* pIt2 = szStr2; *pIt2; ++pIt1, ++pIt2)
    *pIt1 = *pIt2;
  *pIt1 = '\0'; // в цикле завершающий ноль не ставится

  cout << "Itogovaia stroka: " << szStr1 << endl;
  return 0;
}

Как-то так

MebiuS 08.11.2007 23:35

тыкните пожалуйста пальцем в ошибку... говорит что else не там где надо
Цитата:

#include<stdio.h>
#include<conio.h>
#include<ctype.h>
void main()
{
FILE *f1;
int n;

if((f1=fopen("1.dat","r"))!=NULL);
{
fscanf(f1,"%d",&n);
printf("n=%d",n);
fclose(f1);

n=n*n;
f1=fopen("1new.dat","w");
fprintf(f1,"%d ",n);
fclose(f1);
}
else
printf("File not found");

printf("\nProgramma zakonchila raboty. File 1.new sozdan");
getch();
}

Casy 09.11.2007 11:38

Цитата:

Сообщение от MebiuS (Сообщение 553134)
тыкните пожалуйста пальцем в ошибку... говорит что else не там где надо

после if'а у тебя точка с запятой стоит:)

root 09.11.2007 12:10

А никто не подскажет где в инете найти электронную книгу или самоучитель по сетевому программированию под UNIX?

Diom 12.11.2007 21:07

В bc есть help, только он на английском. Есть ли что похожее, только на русском, то есть надо описания всех директив и операторов.

ZiC_ 19.11.2007 21:25

блин, я честно в шоке. Ребята, неужели вы думаете, что всем так легко вначале давалось программирование? Почти уверен, что даже у Casy поначалу возникали похожие трудности, но не думаю, что он лез с вопросами каждый раз, когда ставил ";" в неположеном месте:)
Да, вопросы правда глуповатые, но проблема не в этом. Проблема в том, что вы уже просто отказываетесь думать. А без думания программисты не получаются

Format c:/ 20.11.2007 12:20

проганье это такая вещь которой если будут учить это полная лажа из зя получится, тут самая тема это само обучение и чтение талмудов, токо если уже это не может помочь то тогда можно обратится за советом )

MebiuS 22.11.2007 19:03

Цитата:

Сообщение от Incognito (Сообщение 561543)
Решил реализовать ч/з for, сказали так легче.:)



Он просто выводит строку, введенную мной с клавиатуры, и тупо останавливает программу.
Что делать дальше?

что написал то она и выводит. все неправильно
особенно нравится твой синтаксис вывода и ввода

я бы функцию написал...

TiRex 22.11.2007 19:54

Ввёл твою программу чтобы "чиста поржать": как я и подозревал в данном случае можешь просто написать
Код:

if(strlen(str)==4)
printf("%s",str)

так как scanf("%s",str) записывает строку ДО разделительного символа (в нашем случае это пробел), и получается что ты считываешь лишь одно слово. Подсказка дана по твоему коду...

TiRex 23.11.2007 14:25

Ладно ещё подсказка: считывай функцией gets(), вводи переменую начала слова (к примеру nachalo). nachalo у тебя будет каждый раз на начале каждого слова (по ходу алгоритма переноси), в итоге доходя до пробела ты получаешь длину слова (lenght=i-nachalo), проверяешь на равеноство 4, если равно выводишь посимвольно от nachalo до i, не равно nachalo=++i; и так до конца строки. Ну идея такая если не учитывать знаки препинания. Думаю тебе хотя бы такое надо для начала.

MebiuS 02.12.2007 18:21

имеется массив mass[n][n]
поменять в нем строку со столбцом
индексы строки и столбца задавать самому

нужен именно этот алгоритм замены столбка со строкой
весь мозг сломал уже никак не меняется :)

TiRex 02.12.2007 19:00

for(i=0;i<n;i++)
for(j=i;j<n;j++)
{
if(i=j) continue;
mass[i][j]+=mass[j][i];
mass[j][i]=mass[i][j]-mass[j][i];
mass[i][j]=mass[i][j]-mass[j][i];
}

попробуй так

А если количество столбцов и строк разное: Во-первых, в задании их количество одинаковое. Во-вторых, если их количество разное, то ты никак её не транспонируешь (вроде так это называется), ну или пришлось бы массив создавать новый с m,n, если первый n,m. Вот-с.

REY 12.12.2007 22:11

Товарищи, есть небольшой теоретический вопрос, подскажите пожалуйста. а то я сейчас голову об стену разобью.
Вобщем есть у меня в функции main структура под кодовым названием TEL. Еще объявленна переменная структуы, следующим образом, TEL t[N] (N просто константное число).
Как передать эту структуру вместе с переменной в функцию. т .е какие у этой функции будут параметры. Прототип такой:
void InStruct(...) . Я пробовол что-то вроде struct TEL &t, но не то. Кто подскажет как правильно?

Casy 13.12.2007 08:19

Могу ошибаться, но по моему никак. Страктура - это тип, и если он объявлен внутри какой-то функции (в твоем случае функции main), то и пользоваться им можно только внутри этой функции. Если вынесешь объявление за пределы функции (как правило сразу после include'ов), то функцию можно будет объявить так:
void InStruct(TEL *t, int size)
{
...
}

TiRex 13.12.2007 10:32

Переменную передать можно примерно так
void InStruct(void *t,int size);
правда работать ты с ней нормально не сможешь ;)

Читай внимателньей главу про область видимости имён.

REY 13.12.2007 17:21

Спасибо. Сегодня на лабараторной работе использовал вариант, как у Case. Все дело было в том, что шаблон структуры надо было объявить и в функции - я этого не знал :)

Димка 14.12.2007 01:19

Ребята выручайте плиз.
Товарищу прогу нада написать.
у него ошибка где не знаю проги нету.
Вот условие:
Написать программу которая проверяет, является ли введённая с клавиатуры строка двоичным числом.

завтро я спрошу как решал, у него не получилось. если не трудно попробуйте написать.

TiRex 15.12.2007 10:21

printf("%s",str); считывает лишь 1 слово (до пробела илим переноса строки, может даже до табуляции, точно незнаю)

ZiC_ 15.12.2007 22:21

Тирекс, а как в массив тогда записать? Надо ведь заранее знать количество слов. Значит либо дважды проходить весь файл (в первый раз, чтоб узнать количество слов), но это некрасиво. Использовать списки - думаю пока сложновато для авторов поста. Изучить STL??? Им все таки проще дважды файл пройти)))
Ах да, есть ведь еще вариант создать нереально большой массив, в которых можно запихать дофига и больше слов. Никогда не любил этот вариант, особенно после того, как некоторые преподы специально делали файл, который не влезал в мой массив:) Но, пожалуй, в данном случае он подойдет лучше остальных

TiRex 16.12.2007 03:00

Цитата:

Сообщение от ZiC_ (Сообщение 572868)
Тирекс, а как в массив тогда записать? Надо ведь заранее знать количество слов. Значит либо дважды проходить весь файл (в первый раз, чтоб узнать количество слов), но это некрасиво. Использовать списки - думаю пока сложновато для авторов поста. Изучить STL??? Им все таки проще дважды файл пройти)))
Ах да, есть ведь еще вариант создать нереально большой массив, в которых можно запихать дофига и больше слов. Никогда не любил этот вариант, особенно после того, как некоторые преподы специально делали файл, который не влезал в мой массив:) Но, пожалуй, в данном случае он подойдет лучше остальных

ведь я не предлагал что-то сложнее чем записать пословно. Главное что можно сохранять строку str с scanf("%s",str), дальше уж воля разума как ты это дело обрабатывать будешь. Хочешь делай огромнейший массив, хочешь в списки помещай, я попытался полегче ответить на заданый вопрос

MebiuS 17.12.2007 19:47

Цитата:

Сообщение от Incognito (Сообщение 573758)
Ты не понял fprintf и fscanf это ф-ции записи и чтения из файла.:)

Цитата:

#include<stdio.h>
#include<conio.h>

void vvod(char *name,int *a, int n, int m)
{
FILE *f=fopen(name,"r");
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
fscanf(f,"%d",&a[i*m+j]);
}
fclose(f);
}

void vivod(int *a, int n, int m)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
printf(" %d",a[i*m+j]);
printf("\n");
}
printf("\n");
}


void main()
{
const n=3, m=4;
char matrica_a[]="matrica_a.txt";
char matrica_b[]="matrica_b.txt";
int a[n][m], b[n][m], x1, y1, x2, y2;
vvod(matrica_a,a[0],n,m);
vvod(matrica_b,b[0],n,m);
printf("\n Matrica A chitannaya is faila: \n");
vivod(a[0],n,m);
printf("\n Matrica B chitannaya is faila: \n");
vivod(b[0],n,m);

printf("\n Najmite lubyu klavishy dlya vihoda");
getch();
}
это?

Diom 17.12.2007 21:33

fscanf(<указатель>,"<управляющая строка>",<список ввода>);
Указатель - указатель на файл, управляющая строка - сам текст, список ввода - переменные. Также и с директивой fprintf.
В твоем примере в printf нет списка переменных и точки с запятой после директивы.
В программе сплошные ошибки, она у тебя на считывании массива в бесконечный цикл войдет.))


Текущее время: 18:21. Часовой пояс GMT +7.

Powered by vBulletin® Version 3.8.4 Patch Level 5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot

Форум открыт в июле 2004 г.