Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Хочу научиться програмить


Автор: Tripl-X 29.12.2004, 17:40
Народ, посоветуйте как лучше учиться программировать. А то читая книгу и сслушая лекции я научился только двум вещам: составлять алгоритмы и понимать смысл пограммы, написанной на С. Писать не получается даже елементарные программы типа калькулятора. Подсскажите, что делать?

Автор: NiJazz 29.12.2004, 17:59
Tripl-X
Вот тебе задания.
Напиши программу, которая:
1. Если ввели число больше 5, то выводить "bigger", если меньше 5, то выводить "smaller".
2. Если пользователь ввёл слово "Hello!", выводит "How do you do!". Иначе ничего не выводить.
Скоро приду - проверю. smile

Автор: Doc_d0s 29.12.2004, 18:28
Начинай учится с программирования!!! smile

Автор: Guest 30.12.2004, 02:44
Цитата(Tripl @ 29.12.2004, 17:40)
составлять алгоритмы

Так это как раз и есть программирование.

А то чему ты хочешь научиться - это кодинг.

купи самую глупую книжку по С и порешай задачки которые там есть в каждой главе .

Автор: bel_nikita 30.12.2004, 09:41
Сюда: http://forum.vingrad.ru/index.php?showtopic=7168

Автор: Tripl-X 31.12.2004, 00:05
NiJazz

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

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

int main(void)
{
char A[10];
scanf("%s", &A[10]);
if((A[0]='H')&&(A[1]='e')&&(A[2]=A[3]='l')&&(A[4]='o')&&(A[5]='!'))
printf("How do you do!");
getch();
}

Автор: LuckLess 31.12.2004, 00:31
Tripl-X
Код

void main(void){
char A[10];
scanf("%s", A);
if((A[0]=='H')&&(A[1]=='e')&&(A[2]=='l')&&(A[3]=='l')&&(A[4]=='o')&&(A[5]=='!'))
printf("How do you do!");
getch();
}

= оператор присваивания!! Чтобы сравнивать на равенство нада юзать ==!!

и еще есть функция strcmp() !!!
Код

void main(void){
char A[10]={0};
scanf("%s", A);
if(!strcmp(A,"Hello!"))
printf("How do you do!");
getch();
}


и еще имхо, лучше обЪявлять массив не
char A[10];
а
char A[10]={0};
т.к. в не введенных местах памяти будет лежать непонятно что..
Цитата(Tripl @ 31.12.2004, 00:05)

Код

scanf("%s", &A[10]);


Ты даешь уму указатель на последний элемент массива!!!!
нада
Код

scanf("%s", A);

Автор: En_t_end 31.12.2004, 07:39
Tripl-X
Знаешь другие языки программирования ?

Автор: Tripl-X 31.12.2004, 10:42
LuckLess
Спасибо за помощ! smile

У меня задача по лабе? юзер вводит строку не более 60 символов а прога должна сравнить эти символы и исключить повторяющиеся. Я что-то написал, а работает это не правильно. подскажите что не так?

int main(void)
{
char A[60]={0}, i, k;

printf("Vvedite stroku:\n");
scanf("%s", A);

for(i=0; i<=60; i++)
{
for(k=0; i<=60; k++)
if(A[i]=A[k]) printf("%c", &A[i]);
}
getch();
}


Автор: LuckLess 31.12.2004, 14:02
нууу... тут у тебя 3 ошибки
1)
Код
for(k=0; i<=60; k++)

2)
Код
 if(A[i]=A[k])

3)Неправильно составленный алгоритм.


вот тебе работающий код..
Код

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


void main(void){
char A[61]={0};
int i,k,flag=1;
fgets(A,60,stdin);

for (i=0;i<60 && A[i+1]!=0;i++){
flag=1;
for (k=0;k<60 && A[k+1]!=0;k++){
 if (A[i]==A[k] && i!=k) {flag=0;break;}
}
if (flag) printf("%c ",A[i]);
}

_getch();
}

Автор: Tripl-X 1.1.2005, 16:33
LuckLess

Спасибо.

!!!С Новым Годом!!!

Автор: Tripl-X 3.1.2005, 16:56
LuckLess

А что надо изменить, чтобы здесь выводились повторяющиеся символы только один раз?
Я пытался вставить в цикл
Цитата
for (k=0;k<60 && A[k+1]!=0;k++){
if (A[i]==A[k] && i!=k) {flag=0;break;}
}

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

пытался и условие в операторе if поменять - эффект тотже. Не знаю что и придумать! подскажи что нужно поменять

Автор: Alexandr87 4.1.2005, 19:17
можешь создать яще вектор.
в вектор фигарить симовлы которые ты уже вывел как повторяющиеся, а при выводе делать обход сего массива на поиск определенного симовола

Автор: Tripl-X 4.1.2005, 21:50
Alexandr87

А по-понятнее можно? А то я прочел и не фига не понялsmile

Автор: sonic 4.1.2005, 23:40
если и пихать что-то в контейнер, так это буквы, которые НЕ повторяются...
удастся сэкономить на итерациях...(ИМХО)

Автор: Splintercell 5.1.2005, 02:31
Вот вам ссылка http://childrenforum.fastbb.ru
Этот форум прилагается к моему сайту www.movies2005.narod.ru
Но не обращайте внимания,форум можно сказать на 80 процентов нейтрал!

Автор: LuckLess 5.1.2005, 02:48
Tripl-X
думал повторяющиеся тебе вообще выводить не нада..
если все тока по разу нада , то еще проще..
Код

#include <stdio.h>
#include <conio.h>
void main(void){
char A[61]={0};
int i,k,flag=1;
fgets(A,60,stdin);
for (i=0;i<60 && A[i+1]!=0;i++){
flag=1;
for (k=0;k<i;k++){
 if (A[i]==A[k]) {flag=0;break;}
}
if (flag) printf("%c ",A[i]);
}
_getch();
}

Автор: Tripl-X 6.1.2005, 08:25
А если мне нужно посчитать, сколькл раз вводятся одинаковые символы

Автор: LuckLess 8.1.2005, 14:01
тогда чонидь типа
Код

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


void main(void){
char A[61]={0};
int i,k,flag=1,kol;
fgets(A,60,stdin);

for (i=0;i<60 && A[i+1]!=0;i++){
flag=1;
for (k=0;k<i;k++){
 if (A[i]==A[k]) {flag=0;break;}
}
if (flag) {
 kol=0;
 for (k=0;k<60 && A[k+1]!=0;k++){
 if (A[k]==A[i]) kol++;
 }
 printf("%c %d\n",A[i],kol);
}
}

_getch();
}

Автор: Tripl-X 9.1.2005, 06:27
LuckLess
Одного не пойму, для чег в строке
Код

for (i=0;i<60 && A[i+1]!=0;i++)

Стоит условие A[i+1]!=0?

Автор: volvo877 9.1.2005, 10:45
Tripl-X
У тебя по условию:
Цитата
юзер вводит строку не более 60 символов

А если будет введено не 60, а 40? Нужно же как-то отловить момент окончания строки...

Автор: NiJazz 9.1.2005, 11:58
Наверное, так будет понятнее:
Код

for (i=0; A[i+1]; i++)

Автор: MasterPHP 9.1.2005, 15:36
Не забывайте что переменная может ихменяться в зависимотси от даты

http://www.triada69.narod.ru

Автор: chipset 9.1.2005, 16:05
Цитата(MasterPHP @ 9.1.2005, 04:36)
Не забывайте что переменная может ихменяться в зависимотси от даты

smile

Автор: LuckLess 9.1.2005, 16:30
Извините за небольшой оффтоп , но просто интересно , почему в моем посте некрасивая подсветка кода , а в посте
Tripl-X
красивая..

Автор: chipset 9.1.2005, 16:54
LuckLess
smile он воспользовался подсветкой C# smile

Автор: Найли 9.1.2005, 18:35
и почему я не вышла на этот фору раньше..завтра сдавать прогу...а при использовании спецификации шаблонов всё глючит =( эх...но у меня ещё вся ночь впереди, исправлю smile

Автор: Гость_LuckLess 10.1.2005, 05:23
Чтото пожумал седня про эту задачу , и понял что то что я дал неправильно работает при вводе 60 символов. вот исправленный вариант.

Код

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


void main(void){
   char A[61]={0};
   int i,k,flag=1,kol;
fgets(A,61,stdin);


for (i=0;(i<60 && A[i+1])||(!A[i+1]&&A[i]!='\n');i++){
   flag=1;
   for (k=0;k<i;k++){
 if (A[i]==A[k]) {flag=0;break;}
   }
   if (flag) {
 kol=0;
 for (k=0;(k<60 && A[k+1])||(!A[k+1]&&A[k]!='\n');k++){
 if (A[k]==A[i]) kol++;
 }
 printf("%c %d\n",A[i],kol);
   }
}

_getch();
}

Автор: Tripl-X 27.1.2005, 13:28
У меня задание:
Цитата
Найти  в  массиве  элемент,  наиболее  близкий  к среднему арифметическому суммы его элементов.

Среднее арифметическое я нашел, а наиболее близкий элемент найти не получается. Как Это можно сделать?

Автор: Gelert 27.1.2005, 14:17
Попробуй так.

int flag=MAXINT;
for (i=0;i<10;i++)
if (abs(arif-a[i])<flag)
flag=a[i];

эээ. писал в блокноте - поводу синтаксиса не уверен (проверь как пишется MAXINT)arif- это твое среднеарифметическое. flag будет твоим ответом.
abs() - хранится в math.h

Автор: En_t_end 27.1.2005, 14:23
"Не забывайте что переменная может ихменяться в зависимотси от даты"
Бред - полнейший, а ещё, чтобы откомпилировать программу, надо дождаться полнолуния, иначе ничего не выйдет smile

Автор: Gelert 27.1.2005, 14:59
En_t_end
перед этим совершив обряд обкуривания, и освещения программы, компутера и помещения где будет производится компиляция.

Автор: Tripl-X 28.1.2005, 23:39
Gelert
А что вообще такое MAXINT? И где это проверить?

Таким умным вещам не учат на первом курсе...smile


En_t_end Gelert
smile Моя тема несколько о другом... smile

Автор: Tripl-X 29.1.2005, 23:24
Объясните пару вещей:

1. Структуры надо объявлять как глобальные или как лакальные переменные?

2. Пока я не закрываю программу, структура сохраняет значения. А при следующем запуске она их теряет. Как сделать так, чтобы значения сохранялись после выхода из программы?

Автор: Тиньков 4.2.2005, 14:50
1. Описание структуры как типа нужно сделать глобальным, а объявление переменных этого типа - там, где будешь использовать, т.е. хоть глобальными, хоть локальными.

2. Cамым простым (если не единственным) способом будет сохранять значения структуры в файл, а при повторном запуске восстанавливать.

Автор: Tripl-X 6.2.2005, 15:45
Тиньков

Понятно...

Как работать с графикой? Я тут переписал один код из книги, а компилятор говорит, что BGI графика не поддерживается под Windows. Ведь ккак-то же создается графика, работающая в этой ОС?

И еще:
Массив строк обозначается наподобие str[10][10] как использовать цикл for, чтобы с приращением i увеличивался индекс строки, и выводились все символы этой строки??? Видел в книге обозначение типа *str[] что это? И как это работает???

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)