• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Программа на Си

lastAtlant

Ученик
Регистрация
8 Апр 2012
Сообщения
4
Реакции
0
Баллы
0
Программа на Си

Всем привет, я тут новичок, как и в программировании. Недавно записался на курсы по Си, и после первой практики преподаватель сразу задал несколько задач на дом. Опыта у меня мало, а точнее почти никакого,помогите написать код для программы , хотя бы для одной из них, я знаю что там нужно применить циклы , а также if else, но каким образом сложно представить
Я думаю вам они будут несложны и даже интересны:

Задача 1
Написать программу имитирующую работу высотомера бомбы. Бамба падает с высоты Н, которая которая задается пользователем. В любой момент времени можно узнать пройденное расстояние по формуле
L = g(t*t)/2, где g = 9.81 m/(c*c)
Высотомер бомбы срабатывает раз в секунду и выводит на терминал текущее значение высоты над поверхностью земли h.

Задача 2
Написать программу представляющую символы в массиве согласно правилу: сначала идут латинские буквы, потом цифры. Строка задается в коде программы в виде случайной последовательности букв и цифр. Пользоваться дополнительными массивами нельзя.
Замечание: сортировка в данной программе не применима в виду ее трудоемкости. Нужно использовать группировку элементов массива.

Задача 3
Программа очищающая строку от лишних пробелов. Лишними считаются пробелы в начале строки. и в конце строки и пробелы между словами, если их количество больше 1.
Замечание: Сдесь запрещено создавать дополнительные массивы, т.е. неоходимо стремится к экономии памяти.

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

Вложения

  • Sort.webp
    Sort.webp
    10.6 KB · Просмотры: 221
Никогда раньше не встречал... Что это за метод?
Я тоже не в курсе, но альтернативный пузырьку метод придумал - может быть, это оно? Суть: шлёпаем по массиву слева направо до первой цифры. Фиксируем ее номер (I). Дальше, стартуя от I, двигаемся вправо до первой буквы, пусть ее позиция (J). Меняем местами элементы I и J. Возвращаемся на позицию I и шлепаем дальше, и так продолжаем до тех пор, пока правее очередной цифры не обнаружится ни одной буквы.
Можно и так. Надо будет попробовать.
 
Эмм если я правильно понял, то стартовать от I+1
Ну и вроде от того же метода пузырька не сильно отличается))
Хотя чем метод пузырька сложен и правда не понятно
 
интересно конечно читать как вы эту задачку обсуждаете, но скиньте пожалуйста код чтобы я хоть посмотрел как это вообще получается
а на паскале я не понимаю я только вот Си начал изучать
 
Для первой задачи надо провести табулирование функции с шагом 1 и интервалом от Н до нуля. Если время будет вечером код напишу .
 
Вот код на прошлой неделе не было времени:
Код:
#include "stdafx.h"                             //подключаем стандартные библиотеки
#include "math.h"                              //подключаем стандартные библиотеки

void main()
{
     float t,b,h,x,y;                                            //вводим переменные
     printf("Введите a,b,h -->");                           //Спрашиваем у пользователя ввести необходимые переменные
     scanf("%f %f",&b,&h);                                  //Считываем значения двух переменных
         t=sqert((2*b)/9.81);                                //Рассчитываем общее время падения
             for(x=t;x>=0;t-=h)                               //Запускаем массив, где время больше нуля с шагом 1 сек.
                {
                 y=9.81*((x*x)/2);                           //Вводим нашу формулу
                 printf("x=%f --> y=%f \n",x,y);          //Выводим на экран значения высоты и времени
                 }
    clrscr()                                                       //Очищаем  экран и ждём нажатия кнопкипользователем
    getch()
}


возможно с ошибками
 
Последнее редактирование:
Может кому понадобиться:
Код:
/*visotomer v2.0*/
#include <stdio.h>
#define g 9.81
int main() {
    float high;
    printf("Put in high in metres (0 for exit):\n");
    scanf("%f", &high);
    printf("%f", high);
    while(high!=0)
    {
        for(float time=0;high > (g*time*time/2); time++){
        printf("%.0f sec - %.0f metres\n", time, (high-g*time*time/2));}
        printf("Put in high in metres (0 for exit):\n");
        scanf("%f", &high);
    }
    return 0;
}
 
На третью задачу ответ прост:
Код:
#include <stdio.h>
int main() 
{
    char z;
    int counter = 0;
    printf("Put in a string:\n");
    while(z!='\n'){
        scanf("%c", &z);
        if(z==' ')
        counter++;
        else counter = 0;
        if(counter >= 2)
        {
            continue;
        }
        printf("%c", z);
    }
    return 0;
}

А вот у второй совсем не понял содержание. Есть оригинальное условие?
 
Предлагаю такое решение третьей задачи:
Код:
#include <stdio.h>
#include <ctype.h>
#define N 37
int main()
{
    char k, A[N]="A9B1C0DEF7G82HI4J3K5LMN6OPQRSTUVWXYZ";
    for (int i=0, counter=0; counter<10; i++)
    {
        if(isdigit(A[i]))
        {
            for(int j=36;j>0;j--)
            {
                if(isalpha(A[j]))
                {
                    k=A[i];
                    A[i]=A[j];
                    A[j]=k;
                    counter++;
                    break;
                }
            }
        }
    }
    
    for (int n=0; n<36; n++)
    {printf("%c", A[n]);}
    return 0;
}
 
Знаю, что уже не актуально но мне задачка поравилась и решил сделать первую, вот код:

#include<math.h>
#include<Windows.h>

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Программа имитирующая работу высотометра бомбы\n");
printf("Введите высоту в метрах с которой будет падать бомба:");
int height=0;
scanf("%d",&height);
int t=0, time=0, s=0,h = 0;
printf(" -------------------------------------\n");
printf(" | Момент времени | Высота над землей |\n");
time=sqrt(2*height/9.81);
for ( t=0; t<time+2; ++t)
{
s=(9.81*t*t)/2;
h=height-s;
printf(" -------------------------------------\n");
if (h<=0)
{

printf ("Бдыдыдыж через %d секунд после сброса бомбы!\n",t);
exit(1);
}

printf(" | %d\t | %d\t |\n", t, h);

}
printf(" -------------------------------------\n");
}
 
Назад
Сверху